我有一个具有多个属性的实体,其中一个称为lastModificationDate。每当设置对象的任何属性时,我都想更新 lastModificationDate。
如果我不使用核心数据,我只会为属性提供我自己的资源库并更新 lastModificationDate。但是,我不确定我是否应该弄乱CoreData的属性。
最好的方法是什么?
覆盖二传手很容易完成,你必须确保触发正确的通知才能让其他一切工作(包括 KVO)。
- (void) setThing:(NSObject *)myThing {
self.lastUpdateDate = [NSDate date];
[self willChangeValueForKey:@"thing"];
[self setPrimitiveThing:myThing];
[self didChangeValueForKey:@"thing"];
}
话虽如此,如果您需要做的就是我显示的代码(基本上是设置值并更新上次更新日期),那么您最好使用键值观察并对通知做出反应。它更容易、更干净。
如果您使用的是 NSManagedObject 子类,则不应覆盖属性突变器(setter),因为这些实现是在运行时提供的(因此@dynamic
而不是@synthesize
)。如果你真的想,你可以这样做,但它更混乱,没有理由这样做。请改用键值观察 (KVO)。当值发生更改时,它会通知您。
Apple的KVO文档很棒:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html#//apple_ref/doc/uid/10000177i