正如标题所述,核心数据上的executeFetchRequest“有时”很慢,甚至可以阻止UI。
我怀疑这是因为另一个线程正在将内容保存到Core Data中,这阻止了我执行fetch。
我无法在后台线程中保存数据并执行获取,因为我有机会获得过时的数据吗?
我如何解决这个问题?
答案 0 :(得分:1)
此页面是如何改进核心数据堆栈设计的精彩解释。 http://www.cocoanetics.com/2012/07/multi-context-coredata/
基本上,它的要点是你有一个与你的持久存储协调器交互的后台上下文(NSPrivateQueueConcurrencyType)。这意味着所有昂贵的磁盘写入操作都将在后台进行,使主线程解除阻塞。然后,您拥有处理大多数核心数据交互的主NSManagedObjectContext。最后,无论何时导入大量新记录或进行大量处理,都可以创建子上下文并将其父上下文设置为主上下文。这样,您保存子项并将更改推送到主上下文,然后,主上下文自动保存,然后后台上下文将更改写入磁盘。
就个人而言,我觉得这是一个非常优雅的解决方案,我在我的一个应用程序中采用了它,并且它的工作非常好。