2011-01-21 75 views
0

我有一個名爲「User」的CoreData對象。這個對象User.h和User.m宣佈與@property (nonatomic, retain) NSNumber * isloggedin;屬性我有@dynamic isloggedin;
在我的AppDelegate我有這樣的方法:無法弄清楚這個CoreData對象有什麼簡單的問題

- (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聲明表示錯誤。
[NSNumber numberWithBool:YES]返回1如果我po它。
如果我po user.isloggedinpo [user isloggedin]我得到no member named isloggedinTarget does not respond to this message selector
我以前的代碼工作過,但改變了它,並且無法弄清楚在做這件事之前我做了什麼......或者爲了這個緣故,爲什麼這樣做不起作用。我確信我在這裏錯過了一些非常明顯的事情......但我找不到它。

回答

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; 
    } 
} 
+0

漂亮!正如你所看到的,我仍然在學習Objective-C。謝謝! – 2011-01-21 04:23:09

相關問題