2012-10-27 25 views
1

我需要在NSMutableDictionary中存儲一些bool值,所以我創建了一個解決方案:使用[NSNumber numberWithBool]從bool創建一個對象。 工作正常,值YES,但是NO有時工作正常,有時候結果是「不是客觀C對象」。 mycode的:NSNumber numberWithBool不是一個Objective-C對象

$ //sometimes fine, but sometimes "not an objective-c object" 
$ NSNumber* nsn = [NSNumber numberWithBool:NO]; 

我是新來的Objective-C,所以我很抱歉,如果這是基本的問題,但我真的堅持了下來。 感謝您的幫助。

+0

爲什麼你不只是存儲NSNumber 1或0(直接使用它們,而不是通過numberWithBool),然後在條件'[storedNSNumber boolValue]' – Lukas1

+0

這裏使用真的很簡單有效的解決方案,看起來像我會用它。但現在我只想理解這種行爲=) – noktigula

+4

發送消息'numberWithBool:'到'NSNumber'類將始終返回一個對象,特別是'__NSCFBoolean'的一個實例。問題必須存在於其他地方。你什麼時候得到消息「不是一個客觀的C對象」?請發佈更多代碼。 –

回答

0

通過numberWithBoolinitWithBool返回的對象似乎是由一個字符串初始化NSNumber的,當你在一個字典映射對象需要NSValue這的確是空的。因此字典會將其表示爲空。

0

嘗試之一:

NSObject * y1 = @(YES) ; 
NSObject * n1 = @(NO) ; 
NSObject * y2 = @YES ; 
NSObject * n2 = @NO ; 

又如:

NSDictionary * testDict = @{ 
    @"key1": @YES 
, @"key2": @NO 
} ; 

BOOL b = [testDict[@"key1"] boolValue] ; 
0

多德。你爲什麼不創建自己的類:

@interface Fool 
{ 
    bool _amIFool; 
} 
@property bool amIFool; 
@end 

@implementation 
-(bool)amIFool 
{ 
    return _amIFool; 
} 

-(void)setAmIFool:(bool)amIFool 
{ 
    _amIFool = amIFool 
} 

@end 

然後,你可以推它在字典中。以上代碼僅僅是一個例子。你可以寫更好的東西....

編輯:你甚至可以寫一個比較,所以你可以直接做比較和東西。甚至寫一個便利的方法,這樣很容易初始化...

編輯:只是FYI,我最初的實現被稱爲「酷」。但既然我不酷,我選擇了「傻瓜」。你也可以做。

相關問題