swift - 在 Core Data 中获取数据时的 performBackgroundTask 故障错误
问题描述
我遇到了一个奇怪的问题:我正在使用 backgroundFetch 从核心数据中获取数据。
func fetchDataFromCoreData(completion:@escaping()->Void)
{
let appdel = UIApplication.shared.delegate as! AppDelegate
let context = appdel.persistentContainer.viewContext
appdel.persistentContainer.performBackgroundTask { (context) in
let fetchReq = NSFetchRequest<NSFetchRequestResult>(entityName: "FreeApps")
do
{
let data = try context.fetch(fetchReq) as? [NSManagedObject]
self.resultData = data
print(self.resultData ?? "data is empty")
DispatchQueue.main.async{
completion()
}
}
catch
{
print("fetch error")
}
}
}
现在在我的视图控制器中,在我的表格单元格中:
let myDict = itunesViewModelObj.resultData?[indexPath.row] as? NSManagedObject
print(myDict?.value(forKey: "name") as? String ?? "no name")myDict shows as fault but valefor key comes nil
现在,如果我评论 performBackgroundTask 行数据正确。
请帮助,因为背景任务可能是什么问题。任何建议将不胜感激!提前致谢!
解决方案
PersistentContainer 在主队列上运行。正如该属性的名称所暗示的,此托管对象上下文旨在与应用程序的用户界面结合使用。也许您需要调度回主队列以与 UIApplicationDelegate 和 PersistentContainer 进行交互。PerformBackgroundTask 通常用于更新核心数据。如果你在做 fetches,你应该使用主 viewContext。也许使用...
DispatchQueue.main.async {
// 你的代码
}
推荐阅读
- arrays - 扩展 UITableViewCell 不读取结构元素
- excel - 如何设置 xlColumnClustered 样式,每个条形下方只有一种颜色和值?
- java - 使用 Play Framework 和 Logback 的 Java 内存泄漏
- sql - slick - 选项的动态过滤列表
- mysql - 如何在 XAMPP(Mac 版)中用 MySQL 替换 MariaDB
- javascript - 单击我的按钮重新加载另一个句子
- php - 如何修复 PHP 中的“没有这样的文件或目录错误”?
- python - 从二进制数组 [1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1] 绘制平方信号?
- python - 计算每个关键字和每个标识符的出现次数
- unity3d - 如何检查项目中是否安装了包