objective-c nsmutablearray nsarray

objective c - Cómo convertir NSArray a NSMutableArray



objective-c (3)

Este código da la excepción b / c. Quiero convertir NSMutableArray a NSArray

Esto es muy poco probable. NSMutableArray es una clase derivada de NSArray, por lo que copiar en esa dirección no es un problema.

Tal vez tienes un error porque no conservas la matriz. arrayWithArray devuelve un objeto de autorelease . Utilice [tempPeoples copy] o [[NSArray alloc] initWithArray: tempPeoples];

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];

Este código da la excepción b / c. Quiero convertir NSMutableArray a NSArray Please Help


El tema dice "Cómo convertir NSArray a NSMutableArray ". Para obtener un NSMutableArray de un NSArray , use el método de clase en NSMutableArray + arrayWithArray :.

Su código no muestra la declaración para los pueblos. Suponiendo que se declare como NSMutableArray , puede tener problemas si trata de tratarlo como tal. Cuando envía el mensaje de copia a un NSMutableArray , obtiene un objeto inmutable, NSArray , por lo que si intenta agregar un objeto a un NSMutableArray copiado, recibirá un error.

CFArrayRef está libre de puentes a NSArray , por lo que podría simplificar su código de esta manera:

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

En el código anterior, tempPeoples es un NSMutableArray listo para que usted pueda agregar o eliminar objetos según sea necesario.


Simplemente puedes hacer eso

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