我的CoreData模型中有一个实体,它有一个布尔字段。它作为NSNumber
存储在CoreData实体中。我想要的是访问者使用BOOL
而不是NSNumber
,所以我可以使用
comment.isActive = YES;
而不是:
BOOL isCommentActive = [NSNumber numberWithBool:comment.isActive];
我打算更改自动生成的实体类文件中的代码,但我被告知不要这样做,因为每次我提取模型时它都会覆盖。
我有一个实体的类别,我尝试编写一个访问器,将其转换为同名的BOOL
,但这只会导致我陷入循环。
有些人提到方法眩晕,但这对我来说听起来很神奇。我应该创建一个返回不同名称原语的访问器吗?
答案 0 :(得分:12)
创建时,只需选择“使用基本数据类型的标量属性”选项即可 Xcode中的托管对象子类。这将创建属性
@interface MyEntity : NSManagedObject
@property (nonatomic) BOOL active;
@end
并且所有转换都在“引擎盖下”自动完成。实际上更多
效率很高,因为没有创建NSNumber
个对象。
不幸的是,“核心数据编程指南”已经过时了 对此,it still claims:
您可以将属性声明为标量值,但标量值 核心数据无法动态生成访问器方法 - 您必须这样做 提供自己的实现。
我所知道的唯一Apple“文档”是WWDC 2011会话视频,比较https://stackoverflow.com/a/14091193/1187415。
答案 1 :(得分:0)
我同意Martin,但您可以尝试在现有的NSManagedObject子类中添加此函数:
-(void)setActiveRaw:(BOOL)active
{
[self setActive:[NSNumber numberWithBool:active]];
}
并像这样使用它:
[comment setActiveRaw:YES];
而不是
comment.active = [NSNumber numberWithBool:comment.isActive];
你也可以为此写一个吸气剂:
-(BOOL)getActiveRaw
{
return [self.active boolValue]
}