我正在阅读的文档说setValue:forKey:将把NULL值视为已被删除。但是,我有一个下面的示例始终崩溃:

[myObj setValue:[aDictionary valueForKey:@"keyDoesNotExist"] forKey:@"anotherKey"];

如果aDictionary不包含键keyDoesNotExist,则此行代码崩溃。有什么办法解决吗?在这里做什么合适的事?

myObj是NSManagedObject的实例。 “ anotherKey”是一对多关系,其中myObj可以包含许多“ anotherKey”。

最佳答案

当您使用nil值调用setValue:forKey:时,将调用方法-setNilValueForKey:。默认情况下(在NSObject的实现中),这将引发无效的参数异常。您可以通过覆盖-setNilValueForKey:并执行您想做的任何事情来使用nil值执行其他操作。

另外,如果直接调用myObj的anotherKey设置器,则不会出现异常(当然,这取决于setAnotherKey:的实现):

myObj.anotherKey = [aDictionary valueForKey:@"keyDoesNotExist"];


您正在阅读的文档可能是针对NSMutableDictionary的。如果值为nil,则NSMutableDictionary的setValue:forKey:实现将调用removeObjectForKey:。对于NSObject子类而言,情况并非如此,我认为这就是myObj。

NSKeyValueCoding Protocol Reference documentation中讨论了此行为。

关于iphone - 键值编码-setValue:forKey:其中值为NULL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9013959/

10-14 23:04