在核心数据实用程序教程中未调用 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的主要内容,如果未能解决你的问题,请参考以下文章

Vue简明实用教程(12)——axios

Vue简明实用教程(12)——axios

iOS 中未调用自定义委托方法

无法在 aynctask 中未调用 Looper.prepare() 异常的线程内创建处理程序

VTune 中未显示某些函数调用

应用程序中未调用 Lifecycle.Event.ON_DESTROY