自动更新NSManagedObject属性修改时间戳

iHu*_*ter 7 core-data objective-c key-value-observing nsmanagedobject

我有NSManagedObject两个属性:

NSNumber *score;
NSDate *score_timestamp;
Run Code Online (Sandbox Code Playgroud)

我希望score_timestamp每次更新时都会更新我的字段score.

我显然不能使用-willSave方法,因为我的上下文偶尔score_timestamp会被保存,并且不会是最新的.因此,我应该覆盖-setScore:或设置我的托管对象作为其自己score字段的键值观察器.

-setScore:解决方案似乎很容易:

- (void) setScore:(NSNumber *)score
{
    [self willChangeValueForKey:@"score"];
    [self setPrimitiveScore:score];
    [self didChangeValueForKey:@"score"];

    self.score_timestamp = [NSDate date];
}
Run Code Online (Sandbox Code Playgroud)

以这种方式做事有什么警告吗?或者我应该使用KVO解决方案?

更新

到目前为止,我收到了两个响应,我的代码无法通过setValue: forKey:,我还在等待示例.天真的召唤[(NSManagedObject *)myObject setValue:value forKey:@"score"]呼唤我的二传手.

因此,如果我切换到KVO解决方案,我应该addObserver:在所有awake方法中将其删除willTurnIntoFault吗?或者那不是那么简单?

jrt*_*ton 4

你问题中的实现很好。任何 KVC 尝试更新您的值也将通过 setter 方法(setValue: forKey:只需搜索匹配的访问器方法setKey,请参阅此处了解详细信息)。

  • 我在 `NSManagedObject -didChangeValue:` 文档中看到“您不得覆盖此方法”! (2认同)