在核心数据实用程序教程中未调用 setNilValueForKey
Posted
技术标签:
【中文标题】在核心数据实用程序教程中未调用 setNilValueForKey【英文标题】:setNilValueForKey not called in Core Data Utility Tutorial 【发布时间】:2012-12-14 20:51:57 【问题描述】:Apple 的Core Data Utility Tutorial 建议实现setNilValueForKey:
并测试其效果:
使用键值编码将进程 ID 设置为 nil。构建并运行该实用程序。再次,会发生什么?最后,注释掉 setNilValueForKey: 方法并再次测试。
我尝试使用以下代码将进程 ID 设置为零:[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 *** discussions,但没有人回答这个问题。
【问题讨论】:
【参考方案1】:如果使用动态生成的访问器方法,似乎永远不会调用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 中没有更新。但这纯粹是我的猜测。
【讨论】:
感谢您的精彩解释!我将使用 Apple 的“此文档对您有帮助吗?”留下反馈。文档反馈。 @ghettopia:不客气。 - 您也可以在 bugreport.apple.com 提交错误,有一个特殊类别“文档”。以上是关于在核心数据实用程序教程中未调用 setNilValueForKey的主要内容,如果未能解决你的问题,请参考以下文章