【问题标题】:setNilValueForKey not called in Core Data Utility Tutorial在核心数据实用程序教程中未调用 setNilValueForKey
【发布时间】: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 stackoverflow discussions,但没有人回答这个问题。

【问题讨论】:

    标签: core-data key-value key-value-coding


    【解决方案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 提交错误,有一个特殊类别“文档”。
    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多