核心数据父子背景竞争条件

时间:2016-07-10 21:14:17

标签: ios multithreading core-data nsmanagedobjectcontext

上下文设置:子(私人队列) - >父(主要队列) - >持久性商店协调员

保存我的子上下文时,大约50%的时间,我的父/主上下文不识别更改,因此永远不会保存到持久性存储。

func saveContext(context: NSManagedObjectContext, childThread: Bool) {
    if context.hasChanges {

        do {
            try context.save()
            print("saved on mainThread: \(!childThread)!")
        } catch {
            //...
        }

        if context.parentContext != nil { // private context
            dispatch_async(dispatch_get_main_queue(), {
                print("preparing to save main context")
                self.saveContext(context.parentContext!, childThread: false)
            })
        }
    } else {
        print("no changes seen")
    }
}

换句话说,在我成功保存在子上下文后,我的saveContext方法准备在主线程上保存上下文,只有大约50%的时间,失败并打印出来#34;没有看到任何变化"

context.save()是异步执行的吗?我是否需要使用类似上下文保存的通知? (我认为父子设置不是必需的。)

1 个答案:

答案 0 :(得分:0)

您应该使用performBlock / performBlockAndWait对上下文执行操作。

相关问题