繁体   English   中英

核心数据中的计算属性

[英]Calculated properties in Core Data

考虑具有两个属性的Core Data实体: text和-为简单起见,使用textLength textLength是每次text更改时都会计算的属性。 我有三个要求:

  1. 每次text更改时,最好在NSManagedObject子类内部更新textLength
  2. 由于性能原因, textLength不能按需计算(我正在使用的实际计算出的属性计算起来要昂贵得多)。
  3. 每次text更改时更新UI。

我的解决方案快到了。 我为setText:提供了一个自定义访问器,如下所示:

- (void)setText:(NSString *)text
{
    static NSString *key;
    if (!key) key = NSStringFromSelector(@selector(text));
    [self willChangeValueForKey:key];
    [self setPrimitiveText:text];
    self.textCount = text.count;
    [self didChangeValueForKey:key];
}

并在UI中使用KVO来观察文本更改:

[someObject addObserver:self forKeyPath:NSStringFromSelector(@selector(text)) options:NSKeyValueObservingOptionNew context:someContext];

在大多数情况下,这都可以正常工作,除非执行撤消操作。 我认为核心数据直接调用setPrimiteValue:forKey:但这不会触发我的计算逻辑。 结果,当通知UI更改时, textLength值已过时。

textLength按需计算textLength的情况,计算逻辑应该在哪里?

这是- (void)awakeFromSnapshotEvents:(NSSnapshotEventType)flags方法的目的。 它告诉您更改快照的原因,并允许您更新计算/导出的数据。

(更新派生值时,应使用适当的原始方法进行设置)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM