我正在尝试使用ARC将对象添加到lion,xcode 4.3中的nsmutable数组中。以下是导致程序崩溃的SIGABRT
NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10];
[myArray insertObject:@"Hello World" AtIndex:5]
如何将自定义对象添加到数组中的任何索引?
提前感谢您的帮助。
答案 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"];