具有布尔属性的CoreData实体保存为NSNumber对象

时间:2013-05-28 17:09:12

标签: ios core-data nsmanagedobject

想知道是否有其他人遇到过此问题,或者是否有原因并且我做错了什么。

我有一个使用CoreData的应用程序。在模式中,我有一个'content'实体,其'unlocked'属性设置为Boolean。

但是当我通过Xcode保存实体的Obj C类时,解锁在content.h中显示为:

@property (nonatomic, retain) NSNumber * unlocked;

如果我在content.h中将其更改为布尔值,则会收到ARC编译错误。但是,如果我在尝试获取它时将其作为NSNumber对象保留,它会不一致地返回(如果我有一个NSLog打印它,它会在每次运行时以不同的值返回)。

我可以找出一个相当明显的解决方法,将解锁为NSString设置为“是”或“否”并在相关点进行比较,但我想知道是否有人知道为什么会发生这种情况或者是否存在是将它保持为布尔值的方法。

提前致谢。

2 个答案:

答案 0 :(得分:12)

CoreData存储BOOL不存在的对象。

[NSNumber numberWithBool:YES]

是设置属性的方法,你可以通过阅读mybool = [content.unlocked boolValue]来使用它;

答案 1 :(得分:2)

BOOL像核心数据中的NSNumbers一样存储(如果你查看你的sqlite表,你会看到它们被存储为整数。所以,你将BOOL转换为{{1}在检索之前存储并将NSNumber转换为NSNumber(或者只是将它作为0/1)。

我没有看到任何不一致,但是 - 如果存储的BOOL为零,则相当于NSNumber,如果非零,则为NO