我想查看这句话:
if([optionsDictionary objectForKey:@"showTimes"]
&& [[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])
应用程序崩溃。问题是 - Objective-C会检查所有条件吗? 因为在C#中如果1条件失败则不会检查第二个
答案 0 :(得分:1)
使用[[optionsDictionary objectForKey:@"showTimes"] boolValue]
确定它是0还是1。
将您的条件修改为
if([optionsDictionary objectForKey:@"showTimes"]
&& (1 == [[optionsDictionary objectForKey:@"showTimes"] boolValue]))
答案 1 :(得分:0)
(1)如果陈述和&&和||在Objective-C中对运算符的评估与在C,C ++或Java中进行评估完全相同。
(2)如果您向nil的对象发送任何消息,结果将为0 / NO / nil。因此,&&毫无意义。你可以写完
if ([[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])
顺便说一下,通过将对象与nil进行比较来检查对象是否为零,这样就不会让自己和其他人感到困惑。
(3)将方法isEqualToString发送到非NSString的对象将崩溃。崩溃将告诉您发送给哪种对象的消息。 NSCFBoolean是一个带有布尔值的NSNumber,所以它崩溃了。
您需要知道词典中的内容,或者检查它。如果您没有自己将这些值放入字典中,那么您就不知道那里有什么。例如,如果您使用解析器来解析JSON文档,那么如果JSON文档包含空值,则当前代码将再次崩溃。或者字典。
最好的办法,因为这会一次又一次地发生,就是用一个方法boolValueForKey编写一个NSDictionary类:它会为你做所有的检查。