2012-10-27 27 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,我最初的实现被称为“酷”。但既然我不酷,我选择了“傻瓜”。你也可以做。

相关问题