ios – 从完成处理程序调用父函数的返回

我在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,即,当我的网络请求完成时.我可以这样做,如果是,那怎么样?

最佳答案 您不能使用完成块为上述方法创建返回值.

从上面的代码中可以看出,您希望在启动期间根据服务器上的数据切换屏幕.并且您不希望在呼叫发生时显示标签栏控制器.你可以做的是有一个闪屏视图控制器(或屏幕简单的活动指示器),并将其设置为根视图控制器,直到请求回合.

点赞