2012-02-27 2 views
0

я пытаюсь вставить данные в моей NSMutableArray:NSMutableArray insertObject не работают

это часть моего кода:

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' 

спасибо за чтение

+1

Код не заполнен. Что такое newArray? –

+0

ok просто отредактируйте мой вопрос – XcodeMania

ответ

1

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

newArray=[[NSMutableArray alloc]init]; 
fileArray = [[NSMutableArray alloc] initWithContentsOfFile: file]; 
[newArray addObject:dict]; 
+0

должен иметь индекс с функцией insertObject – XcodeMania

+0

Справа, моя ошибка, я хотел использовать '[newArray addObject: dict];' Надеюсь, что это все равно поможет. –

0

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

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

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

+0

Я думаю, вы смущены тем, что происходит. вы сбрасываете newArray и fileArray каждый раз при запуске этого кода. – sosborn

+0

Я думаю, что ты прав. ok проверить мой код .... – XcodeMania

-1

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

вы можете предопределить размер массива, как это:

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

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

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

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

+0

Мне действительно нужно insertObject не addOject. Я пытаюсь с initWithCapacity, но не работает – XcodeMania

+0

Зачем вам нужно insertObject? Вы помещаете этот элемент в новый массив. Если вы действительно не хотите помещать это в newArray, но fileArray. – sosborn

+0

if i addObject я потеряю то, что у меня было раньше, в моем файле becaue я использую [newArray writeToFile: file atomically: YES]; – XcodeMania

3
  1. NSMutalbeArray : insertObject: atIndex: метод, значение индекса не должно превышать количество элементов в массиве.

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

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

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

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

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 элемент сейчас).

[array replaceObjectAtIndex:someIndex withObject:someObject]; 
Смежные вопросы