3

我有一个包含 2 个实体的托管对象模型。

其中一个实体(我们称之为EA)通过引用第二个实体(称之为EB)的子集中的一些属性来计算它的属性。

EA中,我设置了一个带有谓词的“Fetched Property”,该谓词返回我需要的EB对象的子集。

当我删除、插入EB对象或更改EB对象时,我使用通知来确保EA保持最新。因此,例如在“保存”之后,EA对象将重新计算其属性。

我的问题是,当我访问 Fetched 属性(我EB模型类中使用)[self valueForKey:FetchedPropertyKeyName]时,它似乎只是提取缓存的版本。换句话说,第一次很好,但是当我添加另一个EA对象时,当我访问获取的属性时,我没有在返回的数组中看到它。这在我删除一个对象时最为明显,因为该对象不再存在而导致崩溃。

Fetched Properties 的文档说:

如果目标实体中的对象发生更改,您必须重新评估获取的属性以确保它是最新的。您使用 refreshObject:mergeChanges: 手动刷新属性——这会导致在下次触发对象故障时再次执行与该属性关联的获取请求。

对不起,如果这听起来是一个愚蠢的问题,但不幸的是我没有看到我应该在哪里打电话refreshObject:mergeChanges:??

4

1 回答 1

9

编写问题的纪律让我再次仔细查看代码,所以我现在有了解决方案!

我补充说:

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

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

于 2010-09-23T13:28:44.910 回答