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

时间:2016-02-13 06:53:27

标签: ios iphone swift networking

我在func application(application:didFinishLaunchingWithOptions launchOptions:)执行了一项网络任务功能。默认情况下,rootViewControllerUITabBarController。我希望通过在应用启动时从服务器下载来同步我的品牌列表。我的代码如下:

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。然后,在请求完成后,将调用success:failure:块。

我想要实现的目标,在完成请求之前我不想return true。所以不要在POINT-5上拨打return true。相反,我想在POINT-1,2,3,4中调用return true,即,当我的网络请求完成时。我可以这样做,如果是,那么如何?

1 个答案:

答案 0 :(得分:1)

您不能使用完成块为上述方法创建返回值。

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