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".
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协议参考文档中讨论了此行为.