我在func应用程序中执行了一个网络任务执行功能(应用程序:didFinishLaunchingWithOptions launchOptions :).默认情况下,rootViewController是一个UITabBarController.我希望通过在应用启动时从服务器下载来同步我的品牌列表.我的代码如下:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.tabBarController = self.window?.rootViewController as! UITabBarController
.......
.......
.......
APICaller.getBrandsAndOutletList(withAuthToken: "87087fa228dee4fbbacada66683eb6fa94d4d8968dbc8121d275afe75a79e4b6d",
success: { (result) in
let rCode = result["rcode"] as! String
//If user revoked or access revoked for the user
guard rCode == "200" else {
let updateAppVC = UpdateAppViewController(nibName: "UpdateAppViewController", bundle: NSBundle.mainBundle())
if rCode == "401" {
let userStatus = result["status"] as! String
print(userStatus)
updateAppVC.message = userStatus
updateAppVC.buttonTitle = "Re-login"
self.window?.rootViewController = updateAppVC
//POINT-1
return
}else {
updateAppVC.message = "Some error"
updateAppVC.buttonTitle = "Retry"
self.window?.rootViewController = updateAppVC
//POINT-2
return
}
}
let brands = result["brands"] as! [[String:AnyObject]]
print(brands)
//POINT-3
}) { (errorMessage) in
print(errorMessage)
//POINT-4
}
return true //POINT-5
}
现在,发生了什么是网络请求,列表下载发生在后台.执行return true并出现tabBar.然后在请求完成后,成功:或者失败:调用块.
我想要实现的目标,在完成请求之前我不想返回true.所以不要在POINT-5上调用return true.相反,我想在POINT-1,2,3,4中调用该返回true,即,当我的网络请求完成时.我可以这样做,如果是,那怎么样?
最佳答案 您不能使用完成块为上述方法创建返回值.
从上面的代码中可以看出,您希望在启动期间根据服务器上的数据切换屏幕.并且您不希望在呼叫发生时显示标签栏控制器.你可以做的是有一个闪屏视图控制器(或屏幕简单的活动指示器),并将其设置为根视图控制器,直到请求回合.