【问题标题】:Objective C Boolean ArrayObjective C 布尔数组
【发布时间】:2010-10-12 07:35:57
【问题描述】:

我需要在objective-c 中使用一个布尔数组。我已经基本设置好了,但是编译器会在以下语句中抛出警告:

[updated_users replaceObjectAtIndex:index withObject:YES];

这是,我敢肯定,因为 YES 根本就不是一个对象;这是一个原始的。无论如何,我需要这样做,并且非常感谢有关如何完成它的建议。

谢谢。

【问题讨论】:

  • 当询问警告时,请发布有问题的警告:)

标签: c objective-c arrays boolean primitive


【解决方案1】:

没错,就是这样:NS* 容器只能存储 Objective-C 对象,不能存储原始类型。

你应该能够通过将它包装在一个 NSNumber 中来完成你想要的:

[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]

或使用@(YES)BOOL 包装在NSNumber

[updated_users replaceObjectAtIndex:index withObject:@(YES)]]

然后就可以拉出boolValue了:

BOOL mine = [[updated_users objectAtIndex:index] boolValue];

【讨论】:

    【解决方案2】:

    假设您的数组包含有效对象(并且不是 c 样式数组):

    #define kNSTrue         ((id) kCFBooleanTrue)
    #define kNSFalse        ((id) kCFBooleanFalse)
    #define NSBool(x)       ((x) ? kNSTrue : kNSFalse)
    
    [updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
    

    【讨论】:

    • 我很想知道为什么尼克斯的回答比这个得到了更多的支持,因为这看起来更优雅。谁能解释一下区别?
    【解决方案3】:

    您可以存储NSNumbers:

    [updated_users replaceObjectAtIndex:index
                             withObject:[NSNumber numberWithBool:YES]];
    

    或使用 C 数组,具体取决于您的需要:

    BOOL array[100];
    array[31] = YES;
    

    【讨论】:

      【解决方案4】:

      就像 Georg 所说,使用 C 数组。

      BOOL myArray[10];
      
      for (int i = 0; i < 10; i++){
        myArray[i] = NO;
      }
      
      if (myArray[2]){
         //do things;
      }
      

      Martijn,“myArray”是您使用的名称,在georg 的示例中为“array”。

      【讨论】:

        【解决方案5】:

        从 XCode 4.4 开始,您可以使用 Objective-C 文字。

        [updated_users replaceObjectAtIndex:index withObject:@YES];

        其中@YES 等同于[NSNumber numberWithBool:YES]

        【讨论】:

          【解决方案6】:

          如果您的集合很大或者您希望它比 objc 对象更快,请尝试 CoreFoundation 中的 CFBitVector/CFMutableBitVector 类型。它是 CF-Collections 类型之一,与 NS 对应,但如果需要,它可以快速包装在 objc 类中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-01-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-29
            • 1970-01-01
            相关资源
            最近更新 更多