我已经实现了一个完成处理程序来处理异步功能。该完成处理程序返回一个值,该值对于设置rootViewController的VC类型至关重要。 我遇到的问题是AppDelegate希望尽快设置rootViewController。从非阻塞函数返回时。它崩溃而无需等待完成处理程序。
func application(_ application: UIApplication,....)-> Bool{
...
someAsyncNetworkCall{(err,data){
guard let ability = data else return { fatalError() }
if (ability == 'ALLOW'){
self.window?.rootViewController = stateVC
}else{
self.window?.rootViewController = someOtherVC
}
}
}
func someAsyncNetworkCall(completionHandler:@escaping(Error?,Any?)->()){
...
//Networking code{
completionHandler(nil, data)
}
}
未及时设置ViewController。甚至在completionHandler没有时间恢复之前,它就会崩溃。
func someAsyncNetworkCall(completionHandler:@escaping(Error?,String?)->()){
...
//Networking code{
completionHandler(nil, data)
}
//Some stuff
completionHandler(nil,'ALLOW')
}
这不会崩溃,但是它几乎没有用,但是完成处理程序在这里被调用了两次。我在研究时找不到任何有用的东西。