我有一个函数可以获取存储到Core Data的上下文。我有一些视图控制器,但是我收到了一个错误。
private class func getContext() -> NSManagedObjectContext {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.weatherPersistentContainer.viewContext
}
但是我收到有关从后台线程调用UI API的错误。
答案 0 :(得分:2)
从错误中可以看出,您无法从后台线程调用UIApplication.shared
。由于您不希望在getContext
中包含对DispatchQueue.main.async
方法的每次调用,因此您可以根据需要更新getContext
方法以执行必要的包装:
private class func getContext() -> NSManagedObjectContext {
let appDelegate: AppDelegate
if Thread.current.isMainThread {
appDelegate = UIApplication.shared.delegate as! AppDelegate
} else {
appDelegate = DispatchQueue.main.sync {
return UIApplication.shared.delegate as! AppDelegate
}
}
return appDelegate.weatherPersistentContainer.viewContext
}
此代码确保仅在主队列上调用UIApplication.shared
,即使从后台线程调用getContext
也是如此。好的部分是结果在原始线程上返回。