2011-01-21 12 views
0

"User"というCoreDataオブジェクトがあります。私は、データベース内のテーブルを見て、唯一存在しているこの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; 
} 

:このオブジェクトは、私は、このメソッドを持っている私はAppDelegateで@dynamic isloggedin;
を持っUser.hにし、User.mに@property (nonatomic, retain) NSNumber * isloggedin;で宣言された性質を持っています1人のユーザーと1台のサーバーのみ。そのユーザーのZISLOGGEDINは1に設定されています。
このコードが通過すると、IFステートメントにfalseと表示されます。
[NSNumber numberWithBool:YES]がI poなら1を返します。
po user.isloggedinまたはpo [user isloggedin]の場合、no member named isloggedinTarget does not respond to this message selectorが得られます。
私はこのコードを以前は動作させていましたが、変更してしまいました。この作業を行う前に行ったことを理解することはできません。私は確かに私がここで不気味な明白なものを逃していると確信しています...しかし、私はそれを見つけることができません。

答えて

2

シンプル:NSNumberはポインタタイプなので、==を使用して比較すると、別のポインタNSNumberと実際に比較しています。したがって、両方に同じBOOLの値が含まれていても、比較はYESと評価されません。

boolValueを使用し、そのプリミティブBOOL種類を比較するには:

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

BEAUTIFUL!ご覧のとおり、私はまだObjective-Cを学んでいます。ありがとう! –

関連する問題