Инициализация многомерного NSArray для iPhone devel - PullRequest
1 голос
/ 21 сентября 2010

Я начинаю в iPhone devel и мне нужно использовать многомерный массив.

Я запускаю его, используя:

NSArray *multi=[NSArray 
  arrayWithObjects:[NSMutableArray arrayWithCapacity:13],
  [NSMutableArray array],nil];

, когда пытаюсь присвоить значения n-й ячейкенапример:

[[multi objectAtIndex:4] addObject:@"val"];

Приложение зависает из-за индекса 4 за пределами [0 .. 1].

Какой правильный способ инициализации моего мультимассива?

Спасибозаранее и привет c.

Ответы [ 2 ]

2 голосов
/ 21 сентября 2010

Полагаю, вы хотите создать NSMutableArray из NSMutableArrays:

NSMutableArray *multi = [NSMutableArray arrayWithCapacity: 13];
for (int i = 0; i != 13; i++)
{
    NSMutableArray *array = [NSMutableArray arrayWithCapacity: 10];
    [multi insertObject: array atIndex: 0];
}

После этого ваш вызов действителен.

РЕДАКТИРОВАТЬ: как примечание стороны, емкость! = Считать, какбудет в .NET или C ++ STL, если вы знаете это.

2 голосов
/ 21 сентября 2010

Что вы сделали, это создали массив, содержащий два объекта: два других массива. Вы фактически запрашиваете 5-й объект в этом «супер-массиве», который не будет работать, потому что его нет.

Кстати, даже если вы создадите массив с указанием емкости, он все равно будет пустым. Указание емкости просто выделяет достаточно памяти для массива, чтобы вместить как минимум заданное количество объектов. Если вы не добавите никаких объектов, ваше приложение все равно будет аварийно завершено, если вы попросите, скажем, 10-й объект.

...