我正在阅读的文档说setValue:forKey:
会将NULL
值视为已被删除。然而,我有一个例如以下的例子一直在崩溃:
[myObj setValue:[aDictionary valueForKey:@"keyDoesNotExist"] forKey:@"anotherKey"];
如果aDictionary
不包含密钥keyDoesNotExist
,则此行代码会崩溃。那有什么办法吗?在这里做什么是合适的?
myObj是NSManagedObject
的一个实例。 “anotherKey”是一对多的关系,myObj可以包含许多“anotherKey”。
答案 0 :(得分:6)
当您使用nil值调用setValue:forKey:
时,将调用方法-setNilValueForKey:
。默认情况下(在NSObject的实现中),这会引发无效的参数异常。您可以通过覆盖-setNilValueForKey:
并执行您喜欢的任何操作来使用零值执行其他操作。
或者,如果直接调用myObj的anotherKey setter,则不应该得到异常(当然,取决于setAnotherKey:
的实现):
myObj.anotherKey = [aDictionary valueForKey:@"keyDoesNotExist"];
您正在阅读的文档可能是NSMutableDictionary。如果值为nil,NSMutableDictionary的setValue:forKey:
调用removeObjectForKey:
的实现。对于NSObject子类来说,情况并非如此,我认为它是myObj。