9

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

我有一个带有 CoreData 的应用程序。在架构中,我有一个“内容”实体,其“解锁”属性设置为布尔值。

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

@property (nonatomic, retain) NSNumber * unlocked;

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

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

提前致谢。

4

2 回答 2

12

CoreData 存储对象,BOOL 不是。

[NSNumber numberWithBool:YES]

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

于 2013-05-28T17:34:32.017 回答
2

BOOL 像NSNumbers在 Core Data 中一样存储(如果您查看您的 sqlite 表,您会看到它们存储为整数。因此,您在存储之前将其转换为并将其转换BOOL为(或者只是我们按原样 0/1 ) 检索时。NSNumberNSNumberBOOL

但是,我没有看到任何不一致之处——如果存储NSNumber为零,则等于NO,如果非零,则为YES.

于 2013-05-28T17:13:18.110 回答