2010-01-14 4 views
2

, 내가 얻을 :BOOL 문제가

BOOL isTrue = [someDict objectForKey: @"isTrue"]; 

내가 얻을 :

Initialization makes integer from pointer without a cast 

내가하여 사전 설정 다음과 같이하십시오 :

self.someDict = [[NSMutableDictionary alloc] 
    initWithObjectsAndKeys: 
     self.isTrue, @"isTrue", 
     nil]; 

아이디어가 있으십니까?

답변

19

사용 :

BOOL isTrue = [[someDict objectForKey:@"isTrue"] boolValue]; 

유일한 방법은 NSDictionaryBOOL를 저장할 수는 NSNumber 객체를 상자에 있습니다. BOOL은 원시이며 사전은 객체 만 보유합니다.

[someDict setObject:[NSNumber numberWithBool:isTrue] forKey:@"isTrue"]; 

편집 : @property로이 대표의 두 가지 방법이 있습니다

(주석에 응답) 유사

는, 사용, 사전에 BOOL를 저장합니다. 하나는 ivar을 BOOL으로 선언하고 다른 하나는 NSNumber으로 선언하는 것입니다.

첫 번째 경우, ivar는 : BOOL isTrue;이고 속성은 @property BOOL isTrue;입니다. (분명히 명명 규칙을 무시합니다).

NSNumber의 경우, ivar는 NSNumber * isTrue;이고 속성은 @property (nonatomic, retain) NSNumber * isTrue;입니다. 이 경로를 사용하는 경우 YES 또는 NO을 전달할 수있는 두 번째 setter 메서드 (setIsTrueBool 또는 그 외)를 제공하고 나면 직접 복싱을 수행 할 수 있습니다. 그렇지 않으면 이것을 부르는 사람은 스스로 복싱을해야 할 것입니다.

나는 개인적으로 옵션 # 1로 갈 가능성이 가장 높지만 클래스의 목적이 무엇인지에 따라 달라집니다.

+0

@property는 어떻게 보이나요? @property (비 원자, 할당) BOOL isTrue; –

+1

@LB - 편집 답변. –