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];
Ce code donne une exception car je veux convertir NSMutableArray en NSArray Please Help
Le sujet se lit "Comment convertir NSArray
en NSMutableArray
". Pour obtenir un NSMutableArray
à partir d'un NSArray
, utilisez la méthode de classe sur NSMutableArray
+ arrayWithArray
:.
Votre code ne montre pas la déclaration pour les peuples. En supposant qu'il soit déclaré comme NSMutableArray
, vous pouvez rencontrer des problèmes si vous essayez de le traiter comme tel. Lorsque vous envoyez le message de copie à un NSMutableArray
, vous obtenez un objet immuable, NSArray
. Par conséquent, si vous essayez d'ajouter un objet à un NSMutableArray
copié, vous obtenez une erreur.
CFArrayRef
est ponté sans frais vers NSArray
, vous pouvez donc simplifier votre code de la manière suivante:
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
Dans le code ci-dessus, tempPeoples est un NSMutableArray
autoreleased qui vous permet d'ajouter ou de supprimer des objets selon vos besoins.
Ce code donne une exception car je veux convertir NSMutableArray en NSArray.
C'est très peu probable. NSMutableArray est une classe dérivée de NSArray, la copie dans cette direction n'est donc pas un problème.
Peut-être que vous avez une erreur parce que vous ne conservez pas le tableau. arrayWithArray
renvoie un objet autorelease
. Utilisez soit [tempPeoples copy]
ou [[NSArray alloc] initWithArray: tempPeoples];
Simplement tu peux le faire
NSArray *yourArray ; // Static Array
NSMutableArray* subArrayData = [yourArray mutableCopy];