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