如何确保从上下文而不是缓存中获取Core Data Fetched属性?

时间:2010-09-23 13:09:01

标签: iphone core-data fetched-property

我有一个包含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: ??

1 个答案:

答案 0 :(得分:10)

写这个问题的原则使我再次密切关注代码,所以我现在有了解决方案!

我补充说:

[[self managedObjectContext] refreshObject:self mergeChanges:YES];

进入观察方法。这会导致进行提取,并且我在awakeFromFetch方法中重新评估我的所有属性,而现在提取的属性包含了预期的新数据。