2010-02-05 7 views
7

Ich muss den Inhalt eines NSArray in NSMutable-Array kopieren. Mit anderen Worten, ich möchte arrayCountryChoices nach arraySearchResults kopieren. Irgendwelche Ideen????iPhone SDK: Wie kopiert man den Inhalt eines NSArray in ein NSMutable-Array?

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

Vielen Dank im Voraus.

Antwort

23

es ist entweder

[NSMutableArray arrayWithArray:anArray]; 

oder

[[NSMutableArray alloc] initWithArray:anArray]; 

oder

[anArray mutableCopy]; 

Der Code in Ihrem Beispiel nicht funktioniert, weil Sie arrayWithArray auf einer Instanz von NSMutableArray anrufen, aber arrayWithArray ist eine Klassenmethode.

Im Allgemeinen sind Initialisierungsmethoden, die mit init beginnen, Instanzmethoden, und solche, die mit dem Namen der Klasse (array usw.) beginnen, sind Klassenmethoden. Klassenmethoden geben automatisch freigegebene Objekte zurück, während Instanzmethoden beibehaltene Objekte zurückgeben.

+0

// Das ursprüngliche Array in das durchsuchbare Array kopieren \t arraySearchResults = [[NSMutableArray alloc] initWithArray: arrayCountryChoices]; Arbeitete wie ein Champion. Vielen Dank. – user265550

+0

Gern geschehen. –

+0

Welche davon ist effizienter? – FreeAsInBeer

0

Es funktioniert nicht, weil arrayWithArray eine Klassenmethode ist, keine Instanzmethode.

Sie können [NSMutableArray arrayWithArray:arrayCountryChoices] tun, was Sie brauchen.

Sie könnten einfach [arrayCountryChoices mutableCopy] aufrufen, um ein neues veränderbares Array mit dem Inhalt arrayCountryChoices zurückzugeben.

4

Sie können auch leere änderbare Array erstellen und Objekte hinzufügen, um es mit -addObjectsFromArray Methode

2

Bitte beachten Sie, dass bei der Verwendung von:

[NSMutableArray arrayWithArray:anArray]; 

oder

[[NSMutableArray alloc] initWithArray:anArray]; 

Du immer eine bekommen Array, auch wenn einArray gleich Null war, aber mit:

[anArray mutableCopy]; 

Sie erhalten Null, wenn einArray Null ist. Wenn Sie also sicher sein wollen, dass Sie tatsächlich ein Array erhalten, auch wenn es leer ist, verwenden Sie eine der früheren Methoden.

Verwandte Themen