我尝试在NSMutableArray中插入数据:
这是我的代码的一部分:
newArray=[[NSMutableArray alloc]init];
fileArray = [[NSMutableArray alloc] initWithContentsOfFile: file];
[newArray insertObject:dict atIndex:[fileArray count] ];
这个错误导致崩溃:
[__NSArrayM insertObject:atIndex:]: index 11 beyond bounds for empty array'
感谢阅读
答案 0 :(得分:3)
NSMutalbeArray:insertObject:atIndex:方法,索引值不得大于数组中元素的数量。
NSMutalbeArray:initWithCapacity:方法,即使在创建数组时指定大小,指定的大小也被视为“提示”;数组的实际大小仍为0.
您可以对insertObject:atIndex执行的唯一方法是确保在索引值之前初始化所有元素。
for(int i = 0; i< index; i++)
{
[array addObject:[NSNull null]];
}
答案 1 :(得分:1)
这应该有效:
newArray=[[NSMutableArray alloc]init];
fileArray = [[NSMutableArray alloc] initWithContentsOfFile: file];
[newArray addObject:dict];
答案 2 :(得分:0)
您正尝试在索引处插入一个大于数组计数的对象。
这是因为您正在将对象插入到newArray中,初始化时它的计数为0。
如果您真的想要将对象添加到newArray,请使用索引0。
答案 3 :(得分:0)
首先,据我所知,当你打电话时:
-a*x + b = 0
它将创建并返回一个带有足够内存的NSMutableArray对象,以便最初保存给定数量的对象。这本身并不是一些对象。
所以,(可能这不是一个好方法),你可以用这样的一些空对象填充你的数组:
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity: 20]
现在您可以使用 replaceObectAtIndex:WithObject:方法。因为我猜这就是你想要的( insertObject:AtIndex: - 意味着你要在某个索引处插入一个对象,但是数组的其余部分(在该索引之后)将&#34 ;移动&#34;,现在将有array.count + 1项。)
for (NSInteger i = 0; i < 20; i++)
{
[array addObject:[NSNull null]];
}
答案 4 :(得分:-1)
如果该索引不存在,则无法在特定索引处添加对象,并且创建数组的方式会创建一个长度为0的对象。
您可以像这样预定义数组的大小:
NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:20];
[newArray insertObject:object atIndex:index];
或者您可以从头开始插入对象,让数组从0开始增长,如下所示:
NSMutableArray *newArray = [[NSMutableArray alloc] init];
[newArray addObject:object];
如果是第一次添加对象,则会将其放在索引0处,下一次在索引1处等等。