无法弄清楚我对这个Core Data对象做错了什么

时间:2011-01-21 04:19:00

标签: iphone objective-c core-data boolean

我有一个名为“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.isloggedinpo [user isloggedin],我会获得no member named isloggedinTarget does not respond to this message selector 我之前有这个代码工作,但改变了它,并且无法弄清楚我做了之前做了什么...或者为此,为什么这不起作用。我确定我在这里遗漏了一些非常明显的东西......但是我找不到它。

1 个答案:

答案 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;
    }
}