正确的线程执行删除,插入和从核心数据获取

时间:2016-07-23 13:26:18

标签: ios core-data

我的应用程序连接到Web服务,从3种不同的方法执行POST,并将这3组数据中的每一组都插入到Core Data中。每当有新数据可用时,核心数据中的所有内容都将被删除并插入新数据。这3种方法中的每一种都显示在不同的TableViewControllers中,这意味着每次显示这些TableViewControllers时都会有3次以上的提取。

包装起来,我们有3组从webservice获取的数据,然后我将所有这些数据插入到不同的实体中,同时获取要在主TableViewController中显示的新数据。

现在我正在努力解决线程和多上下文核心数据结构的复杂关系。我应该在哪里执行插入,删除和获取以确保我的应用程序的线程安全?

2 个答案:

答案 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
})