1

我有一个具有多个属性的实体,其中一个称为 lastModificationDate。每当设置任何对象的属性时,我都想更新 lastModificationDate。

如果我没有使用 Core Data,我只需提供我自己的属性设置器并更新 lastModificationDate。但是,我不确定是否应该弄乱 CoreData 的属性。

最好的方法是什么?

4

2 回答 2

1

覆盖设置器很容易完成,您必须确保触发正确的通知以使其他一切正常工作(包括 KVO)。

- (void) setThing:(NSObject *)myThing {
  self.lastUpdateDate = [NSDate date];
  [self willChangeValueForKey:@"thing"];
  [self setPrimitiveThing:myThing];
  [self didChangeValueForKey:@"thing"];
}

话虽如此,如果您需要做的只是我展示的代码(本质上是设置值并更新上次更新日期),那么使用 Key-Value Observing 并对通知做出反应会更好。它更容易,更清洁。

于 2012-05-25T12:11:30.413 回答
0

如果您正在使用 NSManagedObject 子类,则不应覆盖属性修改器(设置器),因为这些实现是在运行时提供的(因此@dynamic而不是@synthesize)。如果你真的想,你可以,但它更混乱,没有理由这样做。请改用键值观察 (KVO)。它会在值更改时通知您。

Apple 的 KVO 文档很棒:https ://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html#//apple_ref/doc/uid/10000177i

于 2012-05-25T11:39:57.057 回答