2010-02-05 12 views
7

Necesito copiar el contenido de un NSArray a una matriz NSMutable. En otras palabras, quiero copiar arrayCountryChoices a arraySearchResults. ¿¿¿¿Algunas ideas????iPhone SDK: ¿Cómo copiar el contenido de un NSArray a una matriz 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]; 

Gracias de antemano.

Respuesta

23

es o

[NSMutableArray arrayWithArray:anArray]; 

o

[[NSMutableArray alloc] initWithArray:anArray]; 

o

[anArray mutableCopy]; 

El código en el ejemplo no funciona debido a que está llamando arrayWithArray en una instancia de NSMutableArray, pero arrayWithArray es un método de clase.

Como regla general, los métodos de iniciación que comienzan con init son métodos de instancia, y los que comienzan con el nombre de la clase (array, etc.) son métodos de clase. Los métodos de clase devuelven objetos liberados automáticamente, mientras que los métodos de instancia devuelven objetos retenidos.

+0

// copiar la matriz original a la matriz de búsqueda \t arraySearchResults = [[NSMutableArray alloc] initWithArray: arrayCountryChoices]; Trabajó como un campeón. Gracias. – user265550

+0

de nada. –

+0

¿Cuál de estos es más eficiente? – FreeAsInBeer

0

No funciona porque arrayWithArray es un método de clase, no un método de instancia.

Puede hacer [NSMutableArray arrayWithArray:arrayCountryChoices] para hacer lo que necesita.

Puede llamar al [arrayCountryChoices mutableCopy] para devolver una nueva matriz mutable con los contenidos de arrayCountryChoices.

4

También puede crear matriz mutable vacío y añadir objetos a él utilizando -addObjectsFromArray método

2

Tenga en cuenta que cuando se utiliza:

[NSMutableArray arrayWithArray:anArray]; 

o

[[NSMutableArray alloc] initWithArray:anArray]; 

que siempre obtendrá una array incluso si anArray era nulo, pero con:

[anArray mutableCopy]; 

obtendrá nil si anArray es nulo. Entonces, si quiere estar seguro de que realmente obtiene una matriz, incluso si puede estar vacía, utilice uno de los métodos anteriores.

Cuestiones relacionadas