Подтвердить что ты не робот

Как преобразовать NSArray в NSMutableArray

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);  
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

NSMutableArray *tempPeoples=[[NSMutableArray alloc]init];

for(int i=0;i<nPeople;i++){

    ABRecordRef i1=CFArrayGetValueAtIndex(allPeople, i);
    [tempPeoples addObject:i1];

//  [peoples addObject:i1];

}// end of the for loop
peoples=[tempPeoples copy];

Этот код дает исключение b/c. Я хочу преобразовать NSMutableArray в NSArray Пожалуйста, помогите

4b9b3361

Ответ 1

Объект гласит: "Как преобразовать NSArray в NSMutableArray". Чтобы получить NSMutableArray из NSArray, используйте метод класса на NSMutableArray + arrayWithArray:.

В вашем коде не содержится декларации для народов. Предполагая, что она объявлена ​​как NSMutableArray, вы можете столкнуться с проблемами, если попытаетесь рассматривать ее как таковую. Когда вы отправляете копию сообщения в NSMutableArray, вы получаете неизменяемый объект NSArray, поэтому, если вы попытаетесь добавить объект в скопированный NSMutableArray, вы получите сообщение об ошибке.

CFArrayRef является бесплатным мостом до NSArray, поэтому вы можете упростить свой код следующим образом:

CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
//NSMutableArray *tempPeoples = [NSMutableArray arrayWithArray:(NSArray*)allPeople];
// even better use the NSMutableCopying protocol on NSArray
NSMutableArray *tempPeoples = [(NSArray*)allPeople mutableCopy];
CFRelease(allPeople);
return tempPeoples; // or whatever is appropriate to your code

В приведенном выше коде tempPeoples является autoreleased NSMutableArray готовым для добавления или удаления объектов по мере необходимости.

Ответ 2

Этот код дает исключение b/c Я хочу преобразовать NSMutableArray в NSArray

Это очень маловероятно. NSMutableArray - это производный класс NSArray, поэтому копирование в этом направлении не является проблемой.

Возможно, у вас есть ошибка, потому что вы не сохраняете массив. arrayWithArray возвращает объект autorelease. Используйте либо [tempPeoples copy], либо [[NSArray alloc] initWithArray: tempPeoples];

Ответ 3

Просто вы можете сделать это

NSArray *yourArray ; // Static Array
NSMutableArray* subArrayData = [yourArray mutableCopy];