我在CoreData模型中有一个具有布尔字段的实体。这作为NSNumber
存储在CoreData实体上。我想要的是让访问者使用BOOL
而不是NSNumber
,所以我可以使用
comment.isActive = YES;
代替:
BOOL isCommentActive = [NSNumber numberWithBool:comment.isActive];
我打算更改自动生成的实体类文件中的代码,但被告知不要执行此操作,因为每次提取模型时它都会覆盖。
我为实体提供了一个类别,并且尝试对访问器进行编码,将其转换为同名的
BOOL
,但这只会导致我陷入循环。有人提到方法旋转,但对我来说听起来很棘手。我应该只创建返回不同名称的原语的访问器吗?
最佳答案
创建时只需选择选项“对原始数据类型使用标量属性”
Xcode中的托管对象子类。这将创建属性
@interface MyEntity : NSManagedObject
@property (nonatomic) BOOL active;
@end
并且所有转换都是在“幕后”自动完成的。实际上更多
高效,因为未创建
NSNumber
对象。不幸的是,《核心数据编程指南》在使用方面已经过时了
为此,it still claims:
您可以将属性声明为标量值,但对于标量值
核心数据无法动态生成访问器方法-您必须
提供您自己的实现。
据我所知,唯一的Apple“文档”是WWDC 2011会议视频,比较https://stackoverflow.com/a/14091193/1187415。