我有一个名为“User”的CoreData对象。此对象在User.h和User.m中具有以@property (nonatomic, retain) NSNumber * isloggedin;
声明的属性,我有@dynamic isloggedin;
在我的AppDelegate中,我有这个方法:
- (NSManagedObject *) getLoggedInUserFromCurrentServer {
NSManagedObject *theUser = nil;
for (User *user in [[self myServer] users]) {
if (user.isloggedin == [NSNumber numberWithBool:YES]) {
// we found it
theUser = user;
break;
}
}
return theUser;
}
我查看了数据库中的表,只有一个用户,只有一个服务器。该用户将ZISLOGGEDIN
设置为1
当此代码通过时,IF
语句显示为false
如果我[NSNumber numberWithBool:YES]
,po
会返回1
如果我po user.isloggedin
或po [user isloggedin]
,我会获得no member named isloggedin
和Target does not respond to this message selector
我之前有这个代码工作,但改变了它,并且无法弄清楚我做了之前做了什么...或者为此,为什么这不起作用。我确定我在这里遗漏了一些非常明显的东西......但是我找不到它。
答案 0 :(得分:2)
简单:NSNumber
是指针类型,因此通过使用==
进行比较,您实际上是在比较指向不同NSNumber
个对象的指针。因此,即使两者都包含相同的BOOL
值,您的比较也不会评估为YES
。
要比较原始BOOL
类型,请使用boolValue
:
for (User *user in [[self myServer] users]) {
if ([user.isloggedin boolValue] == YES) {
// we found it
theUser = user;
break;
}
}