如何确保从上下文而不是缓存中获取 Core Data Fetched Property?
Posted
技术标签:
【中文标题】如何确保从上下文而不是缓存中获取 Core Data Fetched Property?【英文标题】:How do ensure that a Core Data Fetched Property is fetched from the context rather than the cache? 【发布时间】:2010-09-23 13:09:00 【问题描述】:我有一个包含 2 个实体的托管对象模型。
其中一个实体(我们称之为 EA)通过引用第二个实体(称之为 EB)的子集中的一些属性来计算其属性。
在 EA 中,我设置了一个“Fetched Property”,其中包含一个返回我需要的 EB 对象子集的谓词。
当我删除时,插入 EB 对象或更改 EB 对象我使用通知来确保 EA 保持最新。因此,例如在“保存”之后,EA 对象将重新计算其属性。
我的问题是,当我访问 Fetched 属性时(我在 内 EB 模型类使用[self valueForKey:FetchedPropertyKeyName]
),似乎只提取缓存的版本.换句话说,第一次很好,但是当我添加另一个 EA 对象时,当我访问获取的属性时,我没有在返回的数组中看到它。当我删除一个对象时,这一点最为明显,因为该对象不再存在而导致崩溃。
Fetched Properties 的文档说:
如果目标实体中的对象发生更改,您必须重新评估获取的属性以确保它是最新的。您可以使用 refreshObject:mergeChanges: 手动刷新属性——这会导致在下次触发对象故障时再次执行与该属性关联的获取请求。
对不起,如果这听起来是一个愚蠢的问题,但不幸的是我没有看到我应该打电话给refreshObject:mergeChanges:
??
【问题讨论】:
【参考方案1】:编写问题的纪律让我再次仔细查看代码,所以我现在有了解决方案!
我补充说:
[[self managedObjectContext] refreshObject:self mergeChanges:YES];
进入观察方法。这会导致发生提取,并且在 awakeFromFetch 方法中我重新评估了我的所有属性,并且提取的属性现在包含预期的新数据。
【讨论】:
以上是关于如何确保从上下文而不是缓存中获取 Core Data Fetched Property?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 servlet 上下文而不是根上下文中获取 bean?
如何在 Web 应用程序(ASP.NET Core)中使用 TypeScript 导入语句而不是 <reference path...>?