键值编码 - setValue:forKey:其中value为NULL

ran*_*its 2 iphone objective-c key-value-coding

我正在阅读文档,说明setValue:forKey:会将NULL值视为被删除.然而,我有一个例如以下一直在崩溃的例子:

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

如果aDictionary不包含密钥,这行代码会崩溃keyDoesNotExist.那有什么办法吗?在这里做什么是合适的?

myObj是一个实例NSManagedObject."anotherKey"是一对多的关系,myObj可以包含许多"anotherKey".

And*_*sen 6

setValue:forKey:使用nil值调用时,将调用该方法-setNilValueForKey:.默认情况下(在NSObject的实现中),这会引发无效的参数异常.你可以通过覆盖-setNilValueForKey:和做任何你想做的事来做一些零值的事情.

或者,如果直接调用myObj的anotherKey setter,则不应该得到异常(setAnotherKey:当然取决于实现):

myObj.anotherKey = [aDictionary valueForKey:@"keyDoesNotExist"]; 
Run Code Online (Sandbox Code Playgroud)

您正在阅读的文档可能是NSMutableDictionary.如果值为nil,NSMutableDictionary的setValue:forKey:调用实现removeObjectForKey:.对于NSObject子类来说,情况并非如此,我认为它是myObj.

NSKeyValueCoding协议参考文档中讨论了此行为.