/ / Objective-C si evaluación de sentencia - ios, object-c, if-statement

Objective-C si evaluación de sentencia - ios, object-c, if-statement

Quiero comprobar esta declaración:

 if([optionsDictionary objectForKey:@"showTimes"]
&& [[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])

La aplicación se bloquea. La pregunta es: ¿Objective-C verifica todas las condiciones? Porque en C # si una condición falla, la segunda no se verifica en absoluto

Respuestas

1 para la respuesta № 1

Utilizar [[optionsDictionary objectForKey:@"showTimes"] boolValue] para determinar si es 0 o 1.

Modificar su condición como

if([optionsDictionary objectForKey:@"showTimes"]
&& (1 == [[optionsDictionary objectForKey:@"showTimes"] boolValue]))

0 para la respuesta № 2

(1) Si las declaraciones y los && y || Los operadores se evalúan exactamente igual en Objective-C que en C, C ++ o Java.

(2) Si envía cualquier mensaje a un objeto que es nulo, el resultado será 0 / NO / nil. Por lo tanto, el && es inútil. Podrías haber escrito

if ([[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])

Por cierto, es menos confuso para usted y para todos los demás verificar si un objeto es nulo comparándolo con nulo.

(3) Enviar un método isEqualToString a un objetoEso no es un NSString se estrellará. El bloqueo le dirá qué mensaje ha enviado a qué tipo de objeto. NSCFBoolean es un NSNumber con un valor booleano, por lo que se bloquea.

Necesitas saber lo que hay en tudiccionario, o revisarlo. Si no introdujo los valores en el diccionario, no sabe qué contiene. Por ejemplo, si utilizó un analizador para analizar un documento JSON, su código actual se bloqueará de nuevo si el documento JSON contiene una Valor nulo. O un diccionario.

Lo mejor que puedes hacer, porque esto te sucederá una y otra vez, es escribir una categoría NSDictionary con un método boolValueForKey: que realiza todas las comprobaciones por ti.