我最近开始将我的项目从 Swift 3/Xcode 迁移到 Swift 4/Xcode。我的应用程序在运行时崩溃,因为主线程清理程序允许访问UIApplication.shared.delegate
仅在主线程上,导致启动时崩溃。我有以下代码,在 Swift 3 中运行良好 -
static var appDelegate: AppDelegate {
return UIApplication.shared.delegate as! AppDelegate;
}
我的代码中的其他类可以访问 appDelegate。我需要想办法回去UIApplication.shared.delegate
从主线程。
Note:使用DispatchQueue.main.async{}
从任何访问的地方阻止appDelegate
不是一个选择。只需要在规定时间内使用static var appDelegate
仅声明。
寻找聪明的解决方法。
相关崩溃消息:
主线程检查器:在后台线程上调用的 UI API:-[UIApplication delegate]
PID:1094,TID:30824,线程名称:(无),队列名称:NSOperationQueue 0x60400043c540(QOS:未指定),QoS:0
通过使用调度组来解决。
static var realDelegate: AppDelegate?;
static var appDelegate: AppDelegate {
if Thread.isMainThread{
return UIApplication.shared.delegate as! AppDelegate;
}
let dg = DispatchGroup();
dg.enter()
DispatchQueue.main.async{
realDelegate = UIApplication.shared.delegate as? AppDelegate;
dg.leave();
}
dg.wait();
return realDelegate!;
}
并在其他地方调用它
let appDelegate = AppDelegate(). realDelegate!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)