为Core Data属性/属性提供自己的setter

时间:2012-05-25 11:28:20

标签: objective-c cocoa-touch core-data properties

我有一个具有多个属性的实体,其中一个属性称为lastModificationDate。只要设置了任何对象的属性,我就想更新lastModificationDate。

如果我没有使用Core Data,我只会为属性提供自己的setter并更新lastModificationDate。但是,我不确定我是否应该使用CoreData的属性。

最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

可以轻松覆盖设置者,您必须确保为其他所有工作(包括KVO)发出正确的通知。

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

话虽这么说,如果您需要做的只是我展示的代码(基本上设置值并更新上次更新日期),您最好使用键值观察并对通知做出反应。它更容易,更清洁。

答案 1 :(得分:0)

如果您正在使用NSManagedObject子类,则不应覆盖属性mutators(setter),因为这些实现是在运行时提供的(因此@dynamic而不是@synthesize)。你可以,如果你真的想,但它更麻烦,没有理由。请改用键值观察(KVO)。当值发生变化时,它会通知您。

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