2010-02-05 4 views
7

Je dois copier le contenu d'un tableau NSArray vers NSMutable. En d'autres termes, je veux copier arrayCountryChoices en arraySearchResults. Des idées????SDK iPhone: comment copier le contenu d'un tableau NSArray vers NSMutable?

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

Merci d'avance.

Répondre

23

il est soit

[NSMutableArray arrayWithArray:anArray]; 

ou

[[NSMutableArray alloc] initWithArray:anArray]; 

ou

[anArray mutableCopy]; 

Le code dans votre exemple ne fonctionne pas parce que vous appelez arrayWithArray sur une instance de NSMutableArray, mais arrayWithArray est une méthode de classe. En règle générale, les méthodes d'initialisation commençant par init sont des méthodes d'instance, et celles commençant par le nom de la classe (array, etc.) sont des méthodes de classe. Les méthodes de classe renvoient des objets auto-libérés, tandis que les méthodes d'instance renvoient des objets conservés.

+0

// Copie le tableau d'origine dans le tableau de recherche \t arraySearchResults = [[NSMutableArray alloc] initWithArray: arrayCountryChoices]; A travaillé comme un champion. Merci. – user265550

+0

de rien. –

+0

Lequel de ces derniers est le plus efficace? – FreeAsInBeer

0

Cela ne fonctionne pas car arrayWithArray est une méthode de classe, pas une méthode d'instance. Vous pouvez faire [NSMutableArray arrayWithArray:arrayCountryChoices] pour faire ce dont vous avez besoin.

Vous pouvez simplement appeler [arrayCountryChoices mutableCopy] pour renvoyer un nouveau tableau mutable avec le contenu de arrayCountryChoices.

4

Vous pouvez également créer une matrice mutable vide et ajouter des objets à l'aide -addObjectsFromArray méthode

2

S'il vous plaît noter que lors de l'utilisation:

[NSMutableArray arrayWithArray:anArray]; 

ou

[[NSMutableArray alloc] initWithArray:anArray]; 

vous aurez toujours une tableau même si un tableau était nul, mais avec:

[anArray mutableCopy]; 

vous obtiendrez zéro si un tableau est nul. Donc, si vous voulez être sûr que vous obtenez réellement un tableau même s'il est vide, utilisez l'une des méthodes précédentes.

Questions connexes