2010-01-14 69 views
2

當我試圖做到這一點從字典中獲得BOOL,我得到: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]; 

只有這樣,才能一BOOL存儲在一個NSDictionary是框它在NSNumber對象。 A BOOL是原始的,並且字典僅保存對象。

同樣,以存儲BOOL在字典中,使用:

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

編輯:(響應於評論)

有表示此作爲@property的兩種方式。一種是宣佈伊娃爲BOOL,另一種是宣佈它爲NSNumber

對於第一種情況,伊娃是:BOOL isTrue;,屬性是@property BOOL isTrue;(我忽略了命名約定,很明顯)。

對於NSNumber,伊娃是:NSNumber * isTrue;和財產是@property (nonatomic, retain) NSNumber * isTrue;。如果你走這條路線,你可能想要提供第二個設置方法(setIsTrueBool或其他),只允許你傳遞YESNO,然後你自己做拳擊。否則任何人打電話都必須自己做拳擊。

我個人很可能會選擇#1選項,但這取決於班級的目的是什麼。

+0

@property看起來怎麼樣? 我有@property(nonatomic,assign)BOOL isTrue; – 2010-01-14 20:47:16

+1

@LB - 編輯答案。 – 2010-01-14 20:52:12