【问题标题】:how to add nil to nsmutablearray?如何将 nil 添加到 nsmutablearray?
【发布时间】:2010-01-13 15:39:52
【问题描述】:
NSArray *array = [[NSArray alloc] initWithObjects:@"ΕΛΤΑ",
                      @"ΕΛΤΑ COURIER", @"ACS", @"ACS ΕΞΩΤΕΡΙΚΟ", 
                      @"DHL", @"INTERATTICA", @"SPEEDEX", 
                      @"UPS", @"ΓΕΝΙΚΗ ΤΑΧΥΔΡΟΜΙΚΗ", @"ΜΕΤΑΦΟΡΙΚΕΣ ΕΞΩΤΕΡΙΚΟΥ", nil];

这是有效的,因为它最后有 nil。

但我添加了这样的对象:addObject:name 等... 所以最后我必须添加 nil 我这样做 addObhect:nil 但是当我运行应用程序时它仍然在cellForRowAtIndexPath:

我怎样才能完成这项工作?

好的,我不用加 nil

那么我的应用崩溃的原因是什么?

【问题讨论】:

  • 由于您的应用在填充 UITableView 时显然崩溃了,也许您应该分享您的 cellForRowAtIndexPath 实现代码。此外,有关您获得的“崩溃”的更多信息也会有所帮助。是 SIG_ABORT,还是 EXEC_BAD_ACCESS,是否有异常(检查 XCode 中的控制台 Shift+Apple+R)。
  • 当您“一次添加一个”时,您不必在末尾添加 nil。考虑一下这种方式,如果它有帮助:当您“一次添加一个”时,nil“已经存在”,系统会处理这个问题。
  • 我不禁觉得mr-sk、mike-weller和akosma的答案应该组合成“正确”的答案。

标签: iphone objective-c nsmutablearray null


【解决方案1】:

如果必须将nil 对象添加到集合中,请使用NSNull 类:

NSNull 类定义了一个单例对象,用于表示集合对象中的 null 值(不允许 nil 值)。

假设“数组”是 NSMutableArray 类型:

....
[array addObject:[NSNumber numberWithInt:2];
[array addObject:@"string"];
[array addObject:[NSNull null]];

【讨论】:

  • 对于新手(我),测试数组元素是否等于插入的 nil 值的示例,'if ([self.voice objectAtIndex:indexPath.row] != [NSNull null]) { '(谢谢你 akosma)
【解决方案2】:

您无需致电[addObject:nil]

initWithObjects: 中的 nil 仅用于告诉方法列表在哪里结束,因为 C varargs 是如何工作的。当您使用 addObject: 逐一添加对象时,您不需要添加 nil。

【讨论】:

  • 此外,nil 被称为“哨兵”,因为它“保护”列表的末尾,这样事情就不会从末尾迭代。值得知道它被称为哨兵,因为您可能会看到编译器错误/警告,例如“缺少哨兵值......”。在这种情况下,这意味着您忘记了某些内容末尾的 nil,通常是 initWithObjects 之后的列表。
  • 所以基本上如果你在 NSMutableArray 上使用addObjects 方法添加,你不需要在最后添加nil 吗?它只知道它自己什么时候到达终点?
【解决方案3】:

当你调用 addObject 时,你不能添加 nil。

【讨论】:

    【解决方案4】:

    如果您真的想要收藏中的 Null 项目,NSNull 可以满足您的需求。

    【讨论】:

      【解决方案5】:

      您需要添加NSNull 类,最好的方法是这样:

      NSArray *array = @[ @"string", @42, [NSNull null] ];
      

      我个人建议在你的代码设计中使用像0 这样的特定值,而不是 null 或 nil,但有时你需要添加 null。

      this Apple reference有很好的解释。

      【讨论】:

        【解决方案6】:

        nil 用于终止数组

        【讨论】:

          【解决方案7】:

          nil 不是可以添加到数组的对象:数组不能包含nil。这就是addObject:nil 崩溃的原因。

          【讨论】:

            【解决方案8】:

            在添加到数组时通过此方法传递您的对象以避免尝试从对象中插入 nil 对象崩溃。

            -(id) returnNullIfNil:(id) obj  {
                return (obj == nil) ? ([NSNull null]) : (obj);
            }
            

            [NSNull null] 返回一个代表 nil 的空对象。

            【讨论】:

              【解决方案9】:

              您不能将对象添加到NSArray,因为该类是不可变的。如果要在创建数组后更改数组,则必须使用 NSMutableArray

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-12-13
                • 2011-02-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-07-10
                相关资源
                最近更新 更多