2010-07-15 9 views

Respuesta

20

No puede almacenar nil en una clase de colección Foundation como NSArray, debe usar NSNull. Para comprobar para ver si un miembro de la matriz es NSNull, que podría hacer esto:

for (int i = 0; i < 6; i ++) { 
    if ([array objectAtIndex:i] == [NSNull null]) { 
     NSLog(@"object at index %i has no data", i); 
    } 
} 

Si desea ver cuántos elementos hay en la matriz, utilice -[NSArray count]. Si desea iterar a través de la matriz para ver si cualquier objeto es NSNull, pero no le importa cuál, se puede utilizar la enumeración rápida o -[NSArray containsObject:]:

for (id anObject in array) { 
    if (anObject == [NSNull null]) { 
     // Do something 
    } 
} 

o

if ([array containsObject:[NSNull null]]) { 
    // Do something 
} 
+0

bien! ¡Gracias por la info! códigos útiles que podría usar. – Kenneth

1

No se puede tener valores nulos en una NSArray (o NSMutableArray). Por lo tanto, su cláusula if nunca volverá a ser verdadera. Además, debe usar nil en lugar de NULL.

+0

Oh, ya veo. no es de extrañar que obtenga errores. ¡Gracias! – Kenneth

+0

'nil' y' NULL' son lo mismo. * Por convención * usamos 'nil' para punteros a objetos y' NULL' para todo lo demás, pero es solo una convención. No hay diferencia entre los dos. (Puede verificar esto haciendo doble clic en cmd en un 'nil' y viendo cómo se define) –

+0

Sí, tiene razón –

1

Similar a lo que dijo @Marco: está garantizado que objectAtIndex: nunca devolverá nil a menos que algo salga terriblemente mal. Sin embargo, cuando llegues a ese punto, ya es demasiado tarde y no hay nada que puedas hacer (y es más probable que recibas una excepción antes de que ocurra todo esto).

Si necesita almacenar un valor para indicar "no hay nada aquí", debe usar el singleton [NSNull null]. Esto es exactamente para qué es.

+0

¡Está bien! – Kenneth

1

Hasta donde yo sé- No hay índice sin un objeto. porque cuando eliminas un objeto, la matriz se recorta sola. Puedes poner un objeto vacío como @ "" o NSNull, pero ese es un objeto al menos.

Otro punto, obtendrá NSRangeException si el índice que busca está fuera de límite.

+0

oh veo. ¡Gracias por la info! – Kenneth

2

Trate de usar la condición

if ([[Array objectAtIndex:i] length] == 0) { 
// Do what you want 
} 
Cuestiones relacionadas