2011-01-21 3 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.m User.h과에 @property (nonatomic, retain) NSNumber * isloggedin;로 선언했다 단일 사용자 및 단일 서버. 해당 사용자의 ZISLOGGEDIN은 1로 설정되어 있습니다.
이 코드가 완료되면 IF 문에 거짓이 표시됩니다.
[NSNumber numberWithBool:YES]은 내가 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

아름다운! 보시다시피, 저는 여전히 Objective-C를 배우고 있습니다. 감사! –

관련 문제