我遇到了一个关于CoreData和布尔值的奇怪问题:
在我的数据模型中,我已将实体的属性设置为BOOL。后来我设置theEntity.theBooleanValue = [NSNumber numberWithBool:NO]
并保存对象。到目前为止一切都那么好,但是当我尝试用if ([theObject valueForKey:@"theBooleanValue"] == [NSNumber numberBOOL:NO]){//do something}
检查已保存属性的值时,它永远不会跳转到if子句。但是,如果我检查== [NSNumber numberWithInt:0]
它的工作......所以基本上我试图保存一个bool,但它被认为是一个int ...任何想法在那里发生了什么?
答案 0 :(得分:3)
为我检查[[theObject valueForKey:@"theBooleanValue"] boolValue]
更有意义。即,
if(![[theObject valueForKey:@"theBooleanValue"] boolValue])
{
// Your code
}
我认为==
运算符会比较对象指针,而不是数字本身。为了比较数字,有一个separete方法[NSNumber isEqualToNumber:]
。
答案 1 :(得分:2)
请注意,这会让您的生活变得更加轻松,您可以宣布像
这样的属性@property (nonatomic) BOOL theBooleanValue;
这将允许您使用
if (!theObject.theBooleanValue) {
// Your code here
}
您可以直接指定
theObject.theBooleanValue = YES;