Как добавитьObjectsFromArray, где назначение является изменяемым, а источник не изменяемым? - PullRequest
1 голос
/ 30 марта 2012

Если у меня есть изменяемый массив «коды» в NSMutableDictionary «категоризировать»

  NSMutableArray *myMutableArray=(NSMutableArray*)[categorize objectForKey:@"codes"];

, и я добавляю объекты из другого неизменяемого массива «templateCodes» в NSDictionary «templateCategorize»

  [codes addObjectsFromArray:(NSArray*)[templateCategorize objectForKey:@"templateCodes"]];

становится ли массив кодов «неизменяемым», потому что я скопировал элементы из неизменяемого массива (templateCodes)?

Этот код работает при первом копировании объектов, но при второмкод выполняется, я получаю сообщение об ошибке, что селектор "addObjectsFromArray" недопустим, указывая на то, что массив не является изменяемым.

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

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

NSArray *theData = [NSArray arrayWithObjects:@"One",@"Two",@"Three",nil];
NSMutableArray *mut = [NSMutableArray arrayWithObjects:@"Four",@"Five",@"Six",nil];
[mut addObjectsFromArray:theData];
NSLog(@"%@",mut);
NSLog(@"%@",[mut class]);
[mut addObject:@"seven"];
NSLog(@"%@",mut);

В вашем коде должно происходить что-то еще, чего я не вижу.

0 голосов
/ 30 марта 2012

Из протокола NSCopying в документации Apple:

Обсуждение

Возвращенный объект неявно сохраняется отправителем, который отвечает за его освобождение.Возвращенная копия является неизменной, если к получающему объекту применимо соображение «неизменный против изменяемого»;в противном случае точный характер копии определяется классом.

...