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.