Apple的Core Data Utility Tutorial建议实施setNilValueForKey:
并测试其效果:
使用键值编码将进程ID设置为nil。构建并运行该实用程序。再次,会发生什么?最后,注释掉setNilValueForKey:方法并再次测试。
我尝试使用以下代码将进程ID设置为nil:[run setValue:nil forKey:@"processID"];
但这不会调用setNilValueForKey:
。为什么不呢?
这是我的实施;我添加的NSLog语句永远不会出现。
- (void) setNilValueForKey:(NSString*)key {
NSLog(@"setNilValueForKey: %@", key) ;
if ( [key isEqualToString:@"processID"] ) {
[self setValue:@0 forKey:key ] ;
}
else {
[super setNilValueForKey:key] ;
}
}
我找到similar stackoverflow discussions,但没有人回答这个问题。
答案 0 :(得分:3)
如果使用动态生成的访问器方法,似乎永远不会调用setNilValueForKey:
。
如果为“Run.m”中的“processID”属性提供自定义setter方法:
- (void)setProcessID:(NSInteger)processID
{
[self willChangeValueForKey:@"processID"];
[self setPrimitiveValue:@(processID) forKey:@"processID"];
[self didChangeValueForKey:@"processID"];
}
然后
[run setValue:nil forKey:@"processID"]
导致setNilValueForKey:
被调用。
这只是我尝试和错误所经历的,我没有这方面的官方参考。但是自“Mac OS X 10.4”以来,“核心数据实用程序教程”仍然存在,其中动态生成的访问器方法(据我所知)尚不存在。所以它可以是关于setNilValueForKey:
的部分,其中没有为10.5更新。但这纯粹是在我身边猜测。