我的应用程序连接到Web服务,从3种不同的方法执行POST,并将这3组数据中的每一组都插入到Core Data中。每当有新数据可用时,核心数据中的所有内容都将被删除并插入新数据。这3种方法中的每一种都显示在不同的TableViewControllers
中,这意味着每次显示这些TableViewControllers
时都会有3次以上的提取。
包装起来,我们有3组从webservice获取的数据,然后我将所有这些数据插入到不同的实体中,同时获取要在主TableViewController
中显示的新数据。
现在我正在努力解决线程和多上下文核心数据结构的复杂关系。我应该在哪里执行插入,删除和获取以确保我的应用程序的线程安全?
答案 0 :(得分:4)
您的UI是否从主要上下文中获取主线程。
对于导入,不要在主线程上运行会话回调,在任何后台队列上运行它。创建一个新的私有上下文并将main设置为其父级。在会话回调中,使用块接口导入并保存背景上下文,然后保存其父级(再次使用块接口)。
答案 1 :(得分:1)
在多上下文CoreData中,您可以拥有privateQueueRootMOC和mainQueueRootMoc,主MOC用于获取mainThread中的数据,私有MOC用于更新,插入和删除privateMOC线程中的数据。
privateMOC.performBlock({ () -> Void in
//try insert, delete, update
....
try privateMOC.save()
onCompleteBlock() //fetch data in main thread use main MOC
})