【发布时间】: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的尝试将失败,那么这可能就是问题所在?