NSMutableArray insertObject不起作用

时间:2012-02-27 01:26:45

标签: iphone xcode nsmutablearray

我尝试在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'

感谢阅读

5 个答案:

答案 0 :(得分:3)

  1. NSMutalbeArray:insertObject:atIndex:方法,索引值不得大于数组中元素的数量。

  2. NSMutalbeArray:initWithCapacity:方法,即使在创建数组时指定大小,指定的大小也被视为“提示”;数组的实际大小仍为0.

  3. 您可以对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处等等。