[英]Calculated properties in Core Data
考虑具有两个属性的Core Data实体: text
和-为简单起见,使用textLength
。 textLength
是每次text
更改时都会计算的属性。 我有三个要求:
text
更改时,最好在NSManagedObject
子类内部更新textLength
。 textLength
不能按需计算(我正在使用的实际计算出的属性计算起来要昂贵得多)。 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.