【问题标题】:Saving data in child context with privateQueueConcurrencyType使用 privateQueueConcurrencyType 在子上下文中保存数据
【发布时间】:2018-09-18 15:42:53
【问题描述】:

从服务器下载数据后,我会尝试将数据保存在 Core Data 中。根据 Apple 文档,我使用父子上下文来执行保存操作,如下所示:

fileprivate func saveDataInLocalDataBase(_ mList: [Info]?) {

    if mList != nil {
        let mainContext = self.managedObjectContext
        let privateContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
        privateContext.parent = mainContext

        privateContext.perform {

            for mObj in mList! {
                let entity =  NSEntityDescription.entity(forEntityName: entityName, in:privateContext)
                let managedObj = NSManagedObject(entity: entity!, insertInto:privateContext) as! NSManagedObject

               mObj.populateFieldsForManagedObject(managedObj)
            }
            do {
                try privateContext.save()
                mainContext?.performAndWait {
                    do {
                        try mainContext?.save()
                    } catch {
                        fatalError("Failure to save context: \(error)")
                    }
                }
            } catch {
                fatalError("Failure to save context: \(error)")
            }
        }
    }
}

但是,有时当我尝试从核心数据中获取数据时,它会返回 0 个对象。这意味着我的数据没有保存在 Core Data 中。即使我的服务返回了正确的数据,任何人都可以知道问题出在哪里。

注意:此问题随机发生。

当应用程序尝试在后台保存数据并且用户最小化应用程序时,是否有可能在应用程序处于后台时私有上下文无法保存数据?

提前致谢。

【问题讨论】:

  • 我似乎看不出你的代码有什么问题,但在某些情况下self.managedObjectContext 是否有可能是nil?如果是这样,您尝试保存到 mainContext 的尝试将失败,那么这可能就是问题所在?

标签: ios core-data swift3


【解决方案1】:

您的问题的答案与私人无关。数据仍应保存在后台。你需要弄清楚它发生的情况。可能会在您最小化应用程序后立即停止在后台运行服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多