iPhone SDK: Как скопировать содержимое NSArray в массив NSMutable? - PullRequest
8 голосов
/ 05 февраля 2010

Мне нужно скопировать содержимое NSArray в массив NSMutable. Другими словами, я хочу скопировать arrayCountryChoices в arraySearchResults. Любые идеи ????

//main data
NSArray *arrayCountryChoices;

//search results buffer 
NSMutableArray *arraySearchResults;


//create data 
arrayCountryChoices = [[NSArray alloc] initWithObjects:@"foo",@"bar",@"baz",nil];   

//copy the original array to searchable array ->> THIS  IS NOT WORKING AS EXPECTED
arraySearchResults = [[NSMutableArray alloc] arrayWithArray:arrayCountryChoices];

Заранее спасибо.

Ответы [ 4 ]

26 голосов
/ 05 февраля 2010

это либо

[NSMutableArray arrayWithArray:anArray];

или

[[NSMutableArray alloc] initWithArray:anArray];

или

[anArray mutableCopy];

Код в вашем примере не работает, потому что вы вызываете arrayWithArray для экземпляра NSMutableArray, но arrayWithArray является методом класса.

Как правило, методы инициализации, начинающиеся с init, являются методами экземпляра, а методы, начинающиеся с имени класса (array и т. Д.), Являются методами класса. Методы класса возвращают автоматически освобожденные объекты, а методы экземпляра возвращают сохраненные объекты.

4 голосов
/ 05 февраля 2010

Вы также можете создать пустой изменяемый массив и добавить в него объекты, используя -addObjectsFromArray метод

2 голосов
/ 04 октября 2012

Обратите внимание, что при использовании:

[NSMutableArray arrayWithArray:anArray];

или

[[NSMutableArray alloc] initWithArray:anArray];

вы всегда получите массив, даже если anArray был nil, но с:

[anArray mutableCopy];

вы получите ноль, если anArray - ноль. Поэтому, если вы хотите быть уверены, что вы действительно получите массив, даже если он может быть пустым, используйте один из первых методов.

0 голосов
/ 05 февраля 2010

Это не работает, потому что arrayWithArray - это метод класса, а не метод экземпляра.

Вы можете сделать [NSMutableArray arrayWithArray:arrayCountryChoices], чтобы сделать то, что вам нужно.

Вы можете просто позвонить [arrayCountryChoices mutableCopy], чтобы вернуть новый изменяемый массив с содержимым arrayCountryChoices.

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