在我的代码中,我在一个空的valueForKey
对象上调用NSDictionary
,并注意到应用程序确实崩溃了。但据我所知,如果将消息发送到空对象,应用程序将不会崩溃。有人能帮我解释这里的矛盾吗?非常感谢你。
这是我的代码:
if ([[storedManagedObject valueForKey:@"objectId"] isEqualToString:[record valueForKey:@"objectId"]]) {
[self updateManagedObject:[storedRecords objectAtIndex:currentIndex] withRecord:record];
} else {
[self newManagedObjectWithClassName:className forRecord:record];
}
在某些情况下,storedManagedObject
对象为零。
答案 0 :(得分:1)
您的崩溃正在发生,因为isEqualToString
在比较之前对值进行类型检查。如果您只使用isEqual
,传递nil参数时的行为将更像您期望的那样:
if ([[storedManagedObject valueForKey:@"objectId"] isEqual:[record valueForKey:@"objectId"]]) {
在Cocoa框架的所有
isEqualToType:
方法中,nil
不是 这些方法的有效参数和实现可能会引发一个问题 收到nil
后的例外情况。但是,为了向后兼容, Cocoa框架的isEqual:
方法接受nil
,返回NO
。