Add @propertys to Core Data class
我很少通过核心数据来上课。我还需要一些额外的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @interface MyClass () { CGFloat _downloadProgress; NSInteger _downloadErrorCounter; BOOL _downloadAllStuff; BOOL _downloadUserCanceled; } @property (nonatomic, assign) CGFloat downloadProgress; @property (nonatomic, assign) NSInteger downloadErrorCounter; @property (nonatomic, assign) BOOL downloadAllStuff; @property (nonatomic, assign) BOOL downloadUserCanceled; @end |
但是私有变量在myclass中不可见,
最简单的解决方案(如果不想修改Xcode生成的类文件)是将属性添加到核心数据模型并定义属性为瞬态。临时属性不会保存到存储文件中。
另一种选择是使用类似"mogenerator"的工具,它为每个类生成两个类文件实体,一个用于核心数据属性(如果模型更改,将覆盖该属性),一个用于自定义属性(不会被覆盖)。
更新:从xcode 7开始,xcode创建一个类和每个托管对象子类的类别,比较类别中的nsmanagedObject subclass属性。自定义属性可以添加到类中在模型更改时不被覆盖的定义。
只要添加
1 2 | @synthesize downloadErrorCounter = _downloadErrorCounter; ... |
在@implementation中。注意,不是@dynamic。
当尝试使用
1 | @synthesize not allowed in a category's implementation. |
解决方案是使用本博客中描述的关联对象:http://kaspermunck.github.io/2012/11/adding-properties-to-objective-c-categories/
myManagedObject+添加项.h
1 | @property (strong, nonatomic) NSString *test; |
myManagedObject+添加.m
1 2 3 4 5 6 7 8 9 10 11 | NSString const *key = @"my.very.unique.key"; - (void)setTest:(NSString *)test { objc_setAssociatedObject(self, &key, test, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (NSString *)test { return objc_getAssociatedObject(self, &key); } |