我有一个包含2个实体的托管对象模型。
其中一个实体(让我们称之为 EA )通过引用第二个实体的子集中的某些属性来计算它的属性(将其称为 EB )。 / p>
在 EA 中,我设置了一个带有谓词的“Fetched Property”,该谓词返回我需要的 EB 对象的子集。
当我删除,插入 EB 对象或更改 EB 对象时,我会使用通知来确保 EA 保持最新。因此,例如在“保存”之后, EA 对象将重新计算其属性。
我的问题是,当我使用[self valueForKey:FetchedPropertyKeyName]
访问Fetched Property(我在 EB 模型类中 )时,它似乎只是提取缓存版本。换句话说,第一次没问题,但是当我添加另一个 EA 对象时,我在访问fetched属性时没有在返回的数组中看到它。当我删除一个对象时,这是最明显的,因为这个对象不再存在,导致崩溃。
Fetched Properties的文档说:
如果更改了目标实体中的对象,则必须重新评估fetched属性以确保它是最新的。您使用refreshObject:mergeChanges:手动刷新属性 - 这会导致在下次触发对象故障时再次执行与此属性关联的获取请求。
很抱歉,如果这听起来很愚蠢,但遗憾的是我找不到我应该拨打的地方refreshObject:mergeChanges:
??
答案 0 :(得分:10)
写这个问题的原则使我再次密切关注代码,所以我现在有了解决方案!
我补充说:
[[self managedObjectContext] refreshObject:self mergeChanges:YES];
进入观察方法。这会导致进行提取,并且我在awakeFromFetch方法中重新评估我的所有属性,而现在提取的属性包含了预期的新数据。