【问题标题】:NSNumber numberWithBool not an objective-c objectNSNumber numberWithBool 不是objective-c 对象
【发布时间】:2012-10-17 14:06:58
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么不直接存储 NSNumber 1 或 0(直接使用它们,而不是通过 numberWithBool)然后在条件下使用 [storedNSNumber boolValue]
  • 这是一个非常简单有效的解决方案,看来我会使用它。但现在我只想了解这种行为 =)
  • 将消息numberWithBool: 发送到NSNumber 类将始终返回一个对象,特别是__NSCFBoolean 的一个实例。问题一定出在其他地方。你什么时候收到“不是objective-c对象”的消息?请发布更多代码。
  • 我正在尝试将布尔值放入 NSMutableDictionary,因此我决定使用 NSNumber。所有代码看起来像 $ NSNumber *nsn = [NSNumber numberWithBool:NO]; $ [myDictionary setObject:nsn forKey:@"myKey"];这工作不稳定 - 有时很好,有时不是。我在这行设置了断点,经过一些迭代后我认识到,“nsn”有时是@“0”,有时是。这不取决于任何东西 - 我尝试了很多条件,结果真的是独立的。附言抱歉,我无法创建代码块 - 我正在通过电话发布。
  • 谁说它不是一个客观的C对象?调试器?如果是这样,你为什么要关心调试器是否太愚蠢而无法识别对象?相信我,不管别人怎么说,它始终是一个对象。

标签: objective-c boolean nsnumber


【解决方案1】:

numberWithBoolinitWithBool 返回的对象似乎正在通过字符串初始化 NSNumber,当您将对象映射到字典中时,它需要 NSValue 确实为空。因此字典会说它为空。

【讨论】:

    【解决方案2】:

    尝试以下任何一种:

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

    另一个例子:

    NSDictionary * testDict = @{
        @"key1": @YES
    ,   @"key2": @NO
    } ;
    
    BOOL b = [testDict[@"key1"] boolValue] ;
    

    【讨论】:

      【解决方案3】:

      老兄。为什么不创建自己的类:

      @interface Fool
      {
         bool _amIFool;
      }
      @property bool amIFool;
      @end
      
      @implementation
      -(bool)amIFool
      {
         return _amIFool;
      }
      
      -(void)setAmIFool:(bool)amIFool
      {
         _amIFool = amIFool
      }
      
      @end
      

      然后你可以把它塞进字典里。上面的代码只是一个例子。你可以写得更好……

      编辑:您甚至可以编写一个比较器,这样您就可以直接进行比较和其他操作。甚至写了一个方便的方法,所以很容易初始化......

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

      【讨论】:

        猜你喜欢
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        相关资源
        最近更新 更多