[NSMutableArray insertObject:atIndex:]:尝试将nil对象插入0'

时间:2011-08-10 06:13:47

标签: iphone nsmutablearray

我正在创建自定义单元格。

在那里我添加了3个文本字段。所以我想将那些文本字段值存储到nsmutablearray中。

当我尝试这段代码时

UITextField *valueField = [[UITextField alloc] initWithFrame:CGRectMake(165,6, 135, 30)];
valueField.borderStyle =  UITextBorderStyleRoundedRect;
[cell addSubview:valueField];
[array1 addObject:valueField.text];
[valueField release];

我收到这样的错误

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'

所以请告诉我原因 提前谢谢。

5 个答案:

答案 0 :(得分:2)

只需添加此条件以检查文本字段是否为空(即textfield.text = nil):

if (valueField.text != nil) {
     [array1 addObject:valueField.text];
}
else {
     [array1 addObject:@""];
}

这将检查textfield是否为空它将添加一个空字符串。如果你不想要那就跳过其他部分。

答案 1 :(得分:2)

默认情况下,UITextField的 text 属性为nil。在将它添加到数组之前将其设置为空字符串,但我认为这不是您要实现的目标。

答案 2 :(得分:2)

UITextField *valueField = [[UITextField alloc] initWithFrame:CGRectMake(165,6, 135, 30)];
valueField.borderStyle =  UITextBorderStyleRoundedRect;
valueField.text = @"";
[cell addSubview:valueField];
[array1 addObject:valueField.text];
[valueField release];

以上代码可以正常使用。

答案 3 :(得分:1)

我注意到你说你宣布你的阵列是这样的:

“声明为NSMutableArray * array1;”

在向对象添加对象之前是否已分配数组?

换句话说你做到了吗?

NSMutableArray *array1 = [[NSMutableArray alloc] init];

如果你只做了

NSMutableArray *array1;

这只会声明一个指向NSMutableArray对象的指针。它没有指向NSMutableArray对象的实例。

答案 4 :(得分:0)

当您放置[array1 addObject:valueField.text];时,您正在向数组中添加一个nil对象,就像您的错误所说的那样。刚刚初始化并分配了valueField时,valueField.text如何等于某事?