2010-03-08 33 views
11

SO Deseo verificar si el elemento en mi matriz [clientDataArray objectForKey:@"ClientCompany"] es nil.Objective-C cómo comprobar si una cadena es nula

temp = [clientDataArray objectForKey:@"ClientCompany"]; 
    if (temp != [NSNull null]) infofieldCompany.text = temp; 

Hasta ahora no han sido capaces de lograr esto a través del código anterior, pero sí me dan las advertencias

  • advertencia: NSArray puede no responder a -objectForKey:
  • advertencia: comparación de las distintas tipos de Objective-C struct NSNull * y struct NSString * carece de un molde

Mi principal interés es la segunda advertencia, pero la primera advertencia también me interesa. ¿Cómo debo adaptar mi código anterior?

+0

El clientDataArray era en realidad un NSDictionary, pero fue declarado como conjunto, por lo tanto, la advertencia. – oberbaum

Respuesta

19

Su primera advertencia parece que está intentando llamar al objectForKey en un NSArray. Lo cual no va a funcionar, ya que NSArray no tiene un método objectForKey.

En cuanto a la segunda advertencia sólo se puede comparar directamente con nula, es decir:

if (temp != nil) 

o desde cero es equivalente a 0, también puede simplemente hacer:

if (temp) 
+0

Sí, debería haber hecho eso. Agradable y simple también. La primera línea que publiqué realmente funciona bien, pero lo reconsideraré. – oberbaum

+0

Tenga en cuenta que esto no será así si la temperatura es un NSString. Use la respuesta de Robinson – Abramodj

0

Creo que la El problema es (me refiero a la segunda advertencia) es que está comparando el objeto NSString, que podría establecerse como nulo para un objeto NSNull.

¿Has probado la forma habitual C de comprobar null?

if(temp) { 
// It's not null, do something. 
} 

No estoy 100% seguro de esto, pero podría intentarlo. Si lo hizo, lo siento, pero no pude proporcionar más información útil.

¡Buena suerte!

14

Ambas respuestas daban por perdido un punto fundamental: no se puede poner nil en una matriz, por lo que nunca obtendrá nil de una matriz. Usar NSNull como marcador de posición en una matriz es lo correcto,, pero su variable temp no se puede declarar como NSString *, ya que podría no ser una. Use NSObject * o id como tipo de variable para suprimir la advertencia de comparación.

+3

o haga [string isEqual: [NSNull null]] –

0

El singleton NSNull se puede utilizar para construir matrices "entrelazadas" como obj0, obj1, obj2, NSNull, obj3, NSNull, ..., nil.

advertencia: 'NSArray' pueden no responder to'-objectForKey:'

NSArray no implementa objectForKey.
Tu código se bloqueará en el tiempo de ejecución (si se ha asignado e inicializado clientDataArray) Puedes acceder a los elementos de la matriz por índice (objectAtIndex:).
Si necesita asociar objetos con claves, eche un vistazo a NSDictionary.

0

if (! Temp = nil)

o desde cero es equivalente a 0, también puede simplemente hacer:

si (temp)

no estoy por cualquier estiramiento de la imaginación de un experto en Obj-C o Cocoa, en C/C++ puede usar algo como:

if (somePtr! = NULL)

Y, a menos que explícitamente lo establezca en NULL o cambie lo que señalaba, puede estar seguro de que, de hecho, no es nulo ni nulo (lo que sea que esté buscando ...)

Pero me he dado cuenta (mi experiencia personal de todos modos) que, en Obj-C,

Si haces algo como: si (someObj = nil!) oa la inversa,

no hay garantía, se le dirá que es el estado REAL ...

Entonces (después de tratar con un montón de c erupciones) cuando trato con Obj-C (BS), para estar seguro, siempre tengo un BOOL o bandera configurada para rastrear su estado, por lo que no terminas Free-ing, disculpa ... "Release- ing" algo que ya ha desasignado ser ...

16

Después de probar todas las opciones, creo que esta es la mejor opción para comapre NSString nula

if (temp != (NSString *) [ NSNull null ]) 
{ 
    // do some thing 
} 
+0

¿Qué ventajas tiene esto sobre 'temp! = Nil'? – Matthew

0

a pesar de que esta pregunta es viejo, espero que mi respuesta ayudará a alguien más.

Puede probar este

temp = [clientDataArray objectForKey:@"ClientCompany"]; 
if (![temp isKindOfClass:[NSNull class]]) infofieldCompany.text = temp; 
2

La mejor solución para poner a prueba los valores NULL o vacío:

if (yourObj.yourString == (NSString*) [NSNull null] || yourObj.yourString.length == 0) 
{ 
    yourObj.yourString = @""; 
} 
1

tranquila sencilla

if (myString == nil){ 
    NSLog(@"myString is null"); 
} 
Cuestiones relacionadas