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.