Ios 在后台线程错误时调用UI API
我有一个函数,用于获取存储到核心数据的上下文。我有几个视图控制器,但我得到一个错误Ios 在后台线程错误时调用UI API,ios,swift,core-data,Ios,Swift,Core Data,我有一个函数,用于获取存储到核心数据的上下文。我有几个视图控制器,但我得到一个错误 private class func getContext() -> NSManagedObjectContext { let appDelegate = UIApplication.shared.delegate as! AppDelegate return appDelegate.weatherPersistentContainer.viewContext } 但是,我在
private class func getContext() -> NSManagedObjectContext {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.weatherPersistentContainer.viewContext
}
但是,我在访问从后台线程调用的UI API时出错。从错误中可以看出,您无法从后台线程调用
UIApplication.shared
。由于您不想在DispatchQueue.main.async
中包装对我们的getContext
方法的每次调用,因此可以根据需要更新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
。很好的一点是,结果返回到原始线程。您有什么问题吗?如何在不出现错误的情况下获取此结果?