尝试插入nil

时间:2009-12-05 19:12:11

标签: cocoa boolean nsmutablearray

似乎很容易将一个布尔值添加到NSMutableArray。

假设toDoArray初始化为NSMutableArray。以下内容:

BOOL checkBoxState = NO;
[toDoArray addObject:checkBoxState]; 

生成错误“尝试插入nil。”

将负布尔值添加到可变数组的正确方法是什么?

3 个答案:

答案 0 :(得分:6)

正如其他人所说,NSMutableArray只能包含Objective-C对象。它们不必是NSObject的子类,但这是最典型的。

但是,在您看到attempt to insert nil.运行时错误之前很久,您应该看到编译器警告:

warning: passing argument 1 of 'addObject:' makes pointer from integer without a cast

以一种模糊而迂回的方式告诉你究竟是什么问题;你试图将某些东西粘贴到一个不是[指向对象]指针的数组中。

注意警告并修复它们。大多数情况下,警告的存在将指示运行时错误或崩溃。

答案 1 :(得分:5)

NSMutable数组需要一个id,它是Objective C的一个奇怪部分.id是任何对象,但不是原语(例如,int是原语,而NSArray是对象,在扩展中,id s)。

This question可能会有所帮助。

答案 2 :(得分:0)

在将它放入集合对象(NSArray,NSDictionary等)之前,需要使用NSNumber来包装任何基本类型(BOOL,int,NSInterger等)。

将BOOL添加到数组:

BOOL checkBoxState = NO;
NSNumber* n = [NSNumber numberWithBool:checkBoxState];
[toDoArray addObject:n];

从数组获取BOOL:

NSNumber* n = [toDoArray objectAtIndex:0];
BOOL checkBoxState = [n boolValue];