0

正如标题所述,Core Data 上的 executeFetchRequest “有时”很慢,甚至会阻塞 UI。

我怀疑这是因为另一个线程正在将内容保存到 Core Data 中,这阻止了我执行提取。

我无法在后台线程中保存数据并执行提取,因为我有机会获得过时的数据,对吗?

我将如何解决这个问题?

4

1 回答 1

1

这个页面很好地解释了如何改进核心数据堆栈的设计。 http://www.cocoanetics.com/2012/07/multi-context-coredata/

本质上,它的要点是您有一个与持久存储协调器交互的背景上下文 (NSPrivateQueueConcurrencyType)。这意味着所有昂贵的磁盘写入操作都将在后台进行,使您的主线程畅通无阻。然后,您将拥有处理大多数核心数据交互的主要 NSManagedObjectContext。最后,每当您导入大量新记录或进行大量处理时,您都可以创建一个子上下文并将其父上下文设置为主上下文。这样,您保存孩子并将更改推送到主上下文,然后稍后,主上下文自动保存,然后后台上下文将更改写入磁盘。

就个人而言,我觉得这是一个非常优雅的解决方案,我在我的一个应用程序中采用了它,它运行得非常好。

于 2013-06-20T00:39:04.137 回答