我正在阅读的文档说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/