Создание объекта внутри NSMutableArray в другой массив не работает должным образом - PullRequest
0 голосов
/ 22 мая 2011

У меня есть этот код:

secondArray = [firstArray objectAtIndex:1];

Объект с индексом 1 уже является NSMutableArray внутри [firstArray].Проблема в том, что когда я изменяю secondArray, firstArray также меняется.

Как я могу остановить это?

Ответы [ 2 ]

5 голосов
/ 22 мая 2011

Вы захотите сделать что-то вроде следующего кода:

NSMutableArray *secondArray = [[NSMutableArray alloc] initWithArray: [firstArray objectAtIndex:1] copyItems:YES];

Это создаст новый массив и скопирует каждый элемент в первом массиве во вновь созданный массив вместо их сохранения.как в настоящее время в вашем коде.

Однако есть одно предупреждение: все объекты в первом массиве должны соответствовать протоколу NSCopying, чтобы это работало.

3 голосов
/ 22 мая 2011

Лучший способ не дать ему измениться - скопировать массив, а не задавать его. У меня была эта проблема раньше, и вот что помогло мне

РЕДАКТИРОВАТЬ: просто, чтобы я не дал вам плохую информацию, я собираюсь изменить это на более обобщенную версию:

NSMutableArray *secondArray = [NSMutableArray alloc] initWithCapacity:[[firstArray objectAtIndex:1] count];
[secondArray addObjectsFromArray:[firstArray objectAtIndex:1]];

Это должно лучше соответствовать вашей ситуации. Я проверял его дважды, чтобы убедиться, создавая массивы и клонируя их, затем модифицируя клоны, чтобы увидеть, что они являются единственными изменяемыми объектами

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