【问题标题】:Cannot figure out what simple thing I am doing wrong with this CoreData object无法弄清楚我对这个 CoreData 对象做错了什么简单的事情
【发布时间】:2011-01-21 04:19:00
【问题描述】:

我有一个名为“用户”的 CoreData 对象。这个对象在 User.h 和 User.m 中有一个用 @property (nonatomic, retain) NSNumber * isloggedin; 声明的属性,在 User.m 我有 @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。
如果我 po 它,[NSNumber numberWithBool:YES] 返回 1。
如果我po user.isloggedinpo [user isloggedin] 我得到no member named isloggedinTarget does not respond to this message selector
我之前有这个代码工作,但改变了它,无法弄清楚我之前做了什么使这个工作......或者为此,为什么这不起作用。我确定我在这里遗漏了一些非常明显的东西......但我找不到它。

【问题讨论】:

    标签: iphone objective-c core-data boolean


    【解决方案1】:

    简单:NSNumber 是一种指针类型,因此通过使用 == 进行比较,您实际上是在比较指向不同 NSNumber 对象的指针。因此,即使两者都包含相同的 BOOL 值,您的比较也不会评估为 YES

    要比较它们的原始BOOL 类型,请使用boolValue

    for (User *user in [[self myServer] users]) {
        if ([user.isloggedin boolValue] == YES) {
            // we found it
            theUser = user;
            break;
        }
    }
    

    【讨论】:

    • 漂亮!如您所见,我仍在学习Objective-C。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多