Eu quero verificar esta afirmação:
if([optionsDictionary objectForKey:@"showTimes"]
&& [[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])
App cai. A questão é: o Objective-C verifica todas as condições? Porque em C # se 1 condição falhar, em seguida, segundo não é verificado em todos
Respostas:
1 para resposta № 1Usar [[optionsDictionary objectForKey:@"showTimes"] boolValue]
para determinar se é 0 ou 1.
Modifique sua condição como
if([optionsDictionary objectForKey:@"showTimes"]
&& (1 == [[optionsDictionary objectForKey:@"showTimes"] boolValue]))
0 para resposta № 2
(1) Se declarações e os && e || os operadores são avaliados exatamente da mesma forma em Objective-C, pois são avaliados em C, C ++ ou Java.
(2) Se você enviar uma mensagem para um objeto que seja nulo, o resultado será 0 / NO / nil. Portanto, o && é inútil. Você poderia ter acabado de escrever
if ([[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])
By the way, é menos confuso para si e para todos os outros para verificar se um objeto é nulo, comparando-o a zero.
(3) Enviando um método isEqualToString para um objetoIsso não é um NSString irá falhar. A falha lhe dirá qual mensagem você enviou para o tipo de objeto. NSCFBoolean é um NSNumber com um valor booleano, por isso trava.
Você precisa saber o que está em seudicionário, ou verifique-o. Se você não colocou os valores no dicionário você mesmo, você não sabe o que está lá. Por exemplo, se você usou um analisador para analisar um documento JSON, seu código atual falhará novamente se o documento JSON contiver um valor nulo ou um dicionário.
A melhor coisa a fazer, porque isso vai acontecer com você de novo e de novo, é escrever uma categoria NSDictionary com um método boolValueForKey: que faz toda a verificação para você.