NSMutableArray insertObject未添加到数组中

时间:2012-03-01 09:12:47

标签: ios arrays

我正在尝试使用ARC将对象添加到lion,xcode 4.3中的nsmutable数组中。以下是导致程序崩溃的SIGABRT

 NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10];
 [myArray insertObject:@"Hello World" AtIndex:5]

如何将自定义对象添加到数组中的任何索引?

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

虽然您的数组容量为10,但您的数组 size 在创建后立即为0,因此您无法在索引5处插入元素,因为它超出范围。< / p>

此外,您无法将nil插入数组中,但如果您想要一个包含10个nil元素的数组作为占位符,则可以使用NSNull

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10];
for (int i = 0; i < 10; i++) {
    [myArray addObject:[NSNull null]];
}

// then this would work, but it inserts a new element, so your array size will be 11
// [myArray insertObject:@"Hello World" atIndex:5]
// to keep array size at 10 use this method:
[myArray replaceObjectAtIndex:5 withObject:@"Hello World"];

答案 1 :(得分:3)

如果您想以与C固定大小数组相同的方式使用NSArray,我建议您为NSArray实例添加尽可能多的[NSNull null]数组大小,例如在这种情况下有10个项目。

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10];
for(int i = 0; i < 10; i++) {
    [myArray addObject:[NSNull null]];
}

如果要插入对象,请改用replaceObjectAtIndex:withObject:。数组的大小不会改变。

[myArray replaceObjectAtIndex:5 withObject:@"Hello World"];

访问项目时还需要检查[NSNull null]。

id item = [myArray objectAtIndex:5];
if (item != [NSNull null]) {
    NSString* stringItem = item;
    // your code here
}

答案 2 :(得分:1)

如果你在数组中修复了元素数量,那么使用NSArray。然后,您将能够为特定位置设置对象。当你使用NSMutableArray时,它的大小是0.你必须在NSMutableArray中的第5个位置插入最少5个元素

答案 3 :(得分:0)

您正在尝试在空数组中插入对象,该数组不起作用。相反,尝试添加对象。试试这个......

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10];
[myArray addObject:@"Hello World"];