NSNumber numberWithBool不是objective-c对象

时间:2012-10-27 15:45:42

标签: objective-c boolean nsnumber

我需要在NSMutableDictionary中存储一些bool值,所以我已经建立了一个解决方案:使用[NSNumber numberWithBool]从bool创建一个对象。 它的工作正常,值为YES,但是没有它有时工作正常,有时结果是“不是一个客观的c对象”。 mycode的:

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

我是Objective-C的新手,所以如果这是基本问题,我很抱歉,但我真的坚持了下来。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

numberWithBoolinitWithBool返回的对象似乎是用字符串初始化NSNumber,当你在字典中映射对象时,NSValue确实为空。因此,字典会将其视为空。

答案 1 :(得分:0)

尝试以下任一方式:

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

另一个例子:

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

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

答案 2 :(得分:0)

多德。你为什么不创建自己的类:

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

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

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

@end

然后你可以把它推到字典里。上面的代码只是一个例子。你可以写一些更好的东西......

编辑:你甚至可以写一个比较器,这样你就可以直接进行比较和填充。甚至写一个方便的方法,因此很容易初始化...

编辑:仅供参考,我最初的实施被称为“酷”。但由于我不酷,我选择了“傻瓜”。你可以做任何一件事。