2012-04-19 26 views
5

Tengo una lista de objetos (camiones) con varios atributos que pueblan una vista de tabla. Cuando los toca, van a una página de camión individual. Hay un botón de agregar que los agregará a la lista de favoritos en otra tabla vista. ¿Cómo inicializo una matriz mutable vacía en Cocoa?Cómo inicializar una matriz mutable vacía en el Objetivo C

Tengo el siguiente código:

-(IBAction)addTruckToFavorites:(id)sender:(FavoritesViewController *)controller 
{ 
    [controller.listOfTrucks addObject: ((Truck_Tracker_AppAppDelegate *)[UIApplication sharedApplication].delegate).selectedTruck]; 

} 
+0

Usted no debe hacer público matriz mutable del controlador de esa manera. El controlador solo debe hacer que una matriz inmutable esté disponible para otros objetos; para agregar un camión nuevo, debe agregar un método al controlador que lo haga. Entonces, en lugar de obtener 'listOfTrucks' y cambiarlo directamente sin el conocimiento del controlador, le dices al controlador que haga el cambio. –

Respuesta

19

Actualización:

Con la nueva sintaxis que se puede utilizar:

NSMutableArray *myArray = [NSMutableArray new]; 

Respuesta original:

por ejemplo:

NSMutableArray *myArray = [[NSMutableArray alloc] init]; 

Y here a averiguar qué (diferencia entre clase y método de instancia)

+0

Incluso si la matriz está inicialmente vacía, si sabe que va a colocar una cierta cantidad de objetos en ella, 'initWithCapacity:' puede hacer que la población avance más rápido (porque la matriz puede crear inicialmente su almacenamiento de respaldo con espacio para esa cantidad objetos). –

+0

Además, la liberación automática no es el mal que algunas personas creen que es.No hay nada de malo con '[NSMutableArray array]'; simplemente no es apropiado para este caso, suponiendo que el controlador asigne la nueva matriz directamente a su variable de instancia privada '_listOfTrucks'. –

1
NSMutableArray *arr = [NSMutableArray array]; 
0

listOfTrucks = [NSMutableArray array]; le da una nueva matriz mutable.

0
NSMutableArray *arr = [NSMutableArray new]; 
2

Básicamente, hay tres opciones:

Primera

NSMutableArray *myMutableArray = [[NSMutableArray alloc] init]; 

Segunda

NSMutableArray *myMutableArray = [NSMutableArray new]; 

Tercer

NSMutableArray *myMutableArray = [NSMutableArray array]; 
1

También puede inicializar de esta manera

Otra forma de Objective C aparte de la respuesta de @NSSam

NSMutableArray *myMutableArray = [@[] mutableCopy]; 

Para Swift

let myArray = NSMutableArray() 

O

let myArray = [].mutableCopy() as! NSMutableArray; 
Cuestiones relacionadas