iphone objective-c nsmutablearray null

iphone - cómo agregar nil a nsmutablearray?



objective-c null (9)

NSArray *array = [[NSArray alloc] initWithObjects:@"ΕΛΤΑ", @"ΕΛΤΑ COURIER", @"ACS", @"ACS ΕΞΩΤΕΡΙΚΟ", @"DHL", @"INTERATTICA", @"SPEEDEX", @"UPS", @"ΓΕΝΙΚΗ ΤΑΧΥΔΡΟΜΙΚΗ", @"ΜΕΤΑΦΟΡΙΚΕΣ ΕΞΩΤΕΡΙΚΟΥ", nil];

Esto funciona porque no tiene nada al final.

Pero agrego objetos como este: addObject:name etc ... Así que al final tengo que agregar nil Hago esto addObhect: nil pero cuando ejecuto la aplicación aún se bloquea en cellForRowAtIndexPath:

¿Cómo puedo hacer este trabajo?

Ok, no tengo que agregar nada

¿Cuál es la razón por la cual mi aplicación se bloquea entonces?


Necesita agregar la clase NSNull y la mejor manera de hacerlo es así:

NSArray *array = @[ @"string", @42, [NSNull null] ];

Yo personalmente recomiendo usar un valor específico como 0 lugar de nulo o nulo en el diseño de tu código, pero a veces necesitas agregar null.

Hay una buena explicación de esta referencia de Apple .


No necesita llamar a [addObject:nil]

El nil en initWithObjects: solo está allí para indicarle al método dónde termina la lista, debido a cómo funcionan las varargs C. Cuando agrega objetos uno por uno con addObject: no necesita agregar un nil.


No puede agregar nada cuando está llamando a addObject .


No puede agregar un objeto a un NSArray porque esa clase es inmutable. NSMutableArray usar NSMutableArray si desea cambiar la matriz después de NSMutableArray .


Si debe agregar un objeto nil a una colección, use la clase NSNull :

La clase NSNull define un objeto singleton utilizado para representar valores nulos en objetos de colección (que no permiten valores nulos).

Suponiendo que "array" es del tipo NSMutableArray:

.... [array addObject:[NSNumber numberWithInt:2]; [array addObject:@"string"]; [array addObject:[NSNull null]];


Si realmente quieres un elemento Null-ish en tu colección, NSNull está ahí para eso.


nil se usa para terminar la matriz


pase su objeto a través de este método al agregar a la matriz para evitar el intento de insertar un objeto nil en los bloqueos de objetos .

-(id) returnNullIfNil:(id) obj { return (obj == nil) ? ([NSNull null]) : (obj); }

[NSNull null] devuelve un objeto nulo que representa nil.


nil no es un objeto que pueda agregar a una matriz: una matriz no puede contener nil . Esta es la razón addObject:nil cual addObject:nil cuelga.