NSArray против NSMutableArray - PullRequest
       4

NSArray против NSMutableArray

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

У меня есть базовый стек данных с двумя объектами: «Клиент» и «Автомобиль».Это отношения один на май.У меня есть два tableViewController для отображения сначала клиентов, а затем, как только клиент выбрал список , который клиентских машин.

В настоящее время я использую следующий фрагмент кода во втором моем tableViewController viewDidLoad method ...

NSSet *cars = client.cars;
carsArray = [cars allObjects];

carsArray является NSArray и объявляется и синтезируется во втором tableViewCotroller.Если я попытаюсь сделать carsArray NSMutableArray (чтобы я мог отредактировать его позже в случае удаления автомобиля), я получу следующее предупреждение компилятора ...

Incompatible Objective-C types 'struct NSArray *', expected 'struct NSMutableArray *' when passing argument 1 of 'setCarsArray:' from distinct Objective-C type

Может ли кто-нибудь объяснить мне, почему это работает с NSArray, но не NSMutableArray, пожалуйста?

Большое спасибо

1 Ответ

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

allObjects метод возвращает NSArray *, и если вы просто пытаетесь присвоить его свойству NSMutableArray, вы не конвертируете сам объект.

Вам необходимо использовать +[NSMutableArray arrayWithArray:] или более универсальныйmethod -[NSObject mutableCopy]:

[self setCarsArray:[[cars allObjects] mutableCopy]];

Это будет иметь место для всех изменяемых классов в Objective-C: для создания изменяемого объекта из неизменяемого вам придется явно вызывать методы преобразования.

...