从服务器下载数据后,我正在尝试将数据保存在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中。任何人都可以知道问题是什么,即使我的服务返回正确的数据。
注意:此问题是随机发生的。
当应用程序尝试在后台保存数据并且用户最小化应用程序时,是否有可能将应用程序处于后台时私有上下文无法保存数据?
提前致谢。
答案 0 :(得分:3)
你的问题的答案是没有私人与它无关。数据仍应保存在后台。你需要弄清楚它发生的情况。一旦最小化应用程序,服务可能会在后台停止运行。