为 CoreData 属性/属性提供您自己的资源库



我有一个具有多个属性的实体,其中一个称为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

相关内容

最新更新