Ios 使用privateQueueConcurrencyType在子上下文中保存数据

Ios 使用privateQueueConcurrencyType在子上下文中保存数据,ios,core-data,swift3,Ios,Core Data,Swift3,一旦我从服务器下载了数据,我就试图将数据保存在核心数据中。根据Apple文档,我使用父子上下文执行保存操作,如下所示: fileprivate func saveDataInLocalDataBase(_ mList: [Info]?) { if mList != nil { let mainContext = self.managedObjectContext let privateContext = NSManagedObjectContext(co

一旦我从服务器下载了数据,我就试图将数据保存在核心数据中。根据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个对象。这意味着我的数据没有保存在核心数据中。即使我的服务返回正确的数据,有人知道问题出在哪里吗

注意:此问题随机出现。

当应用程序试图在后台保存数据时,用户是否会最小化应用程序,从而使私有上下文在应用程序位于后台时无法保存数据


提前谢谢。

你的问题的答案是没有私人关系。数据仍应保存在后台。你需要弄清楚它发生的情况。当你最小化应用程序时,服务可能会停止在后台运行。

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