NSMutableArray insertObject не работает - PullRequest
0 голосов
/ 27 февраля 2012

я пытаюсь вставить данные в мой 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 ]

3 голосов
/ 27 февраля 2012
  1. NSMutalbeArray: insertObject: atIndex: метод, значение индекса не должно быть больше количества элементов в массиве.

  2. NSMutalbeArray: initWithCapacity: метод, даже если при создании массива указывается размер, указанный размер рассматривается как «подсказка»; фактический размер массива по-прежнему равен 0.

  3. Единственный метод, который вы можете сделать, чтобы вставитьObject: atIndex, - это обеспечить инициализацию всех элементов до значения индекса.

    for(int i = 0; i< index; i++)
    {
        [array addObject:[NSNull null]];
    }
    
1 голос
/ 27 февраля 2012

Это должно работать:

newArray=[[NSMutableArray alloc]init];
fileArray = [[NSMutableArray alloc] initWithContentsOfFile: file];
[newArray addObject:dict];
0 голосов
/ 28 декабря 2015

Прежде всего, насколько я знаю, когда вы вызываете:

 NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity: 20]

Он создаст и вернет объект NSMutableArray с достаточным объемом памяти для первоначального хранения заданного числа объектов.Это не число объектов само по себе.

Итак, ( вероятно, это не очень хороший способ ), вы можете заполнить свой массив некоторыми нулевыми объектами, например так:

for (NSInteger i = 0; i < 20; i++)
{
    [array addObject:[NSNull null]];
}

И теперь вы можете использовать replaceObectAtIndex: WithObject: метод для ваших целей.Потому что я предполагаю, что это то, что вам нужно ( insertObject: AtIndex: - означает, что вы собираетесь вставить объект по какому-либо индексу, но остальная часть массива (после этого индекса) будет «двигаться»,и теперь будет array.count + 1 items).

[array replaceObjectAtIndex:someIndex withObject:someObject];
0 голосов
/ 27 февраля 2012

Вы не можете добавить объект по определенному индексу, если этот индекс не существует, и способ создания массива создает объект с длиной 0.

Вы можете либо предопределитьразмер массива примерно такой:

NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:20];
[newArray insertObject:object atIndex:index];

Или вы можете просто вставить объекты с самого начала и позволить массиву вырасти из 0, например так:

NSMutableArray *newArray = [[NSMutableArray alloc] init];
[newArray addObject:object];

, который поместит его виндекс 0, если вы добавляете объект в первый раз, индекс 1 в следующий раз и т. д.

0 голосов
/ 27 февраля 2012

Вы пытаетесь вставить объект с индексом, превышающим количество массивов.

Это потому, что вы вставляете объект в newArray, который имеет счетчик 0 при инициализации.

Если вы действительно хотите добавить объект в newArray, используйте индекс 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...