簡體   English   中英

AppDelegate中的Swift Post方法到根ViewController

[英]Swift Post method in AppDelegate to root ViewController

我用post方法編寫函數以推送到ViewController。 在post方法中,我要獲取用戶的類型,並且按類型,我應該推送到不同的ViewControllers

class GetUser:NSObject {
    class func restartapp() {
        guard let window = UIApplication.shared.keyWindow else {return}
        var url = baseurl + "/get-user/"
        var param = ["token":APItoken.getToken()!]
        window.makeKeyAndVisible()
        Alamofire.request(url, method: .post, parameters: param, encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
            switch response.result {
            case.failure(let err):
                print(err)
            case.success(let val):
                var json = JSON(val)
                print(json)
                if json["user"]["role_id"].intValue == 2 {
                    window.rootViewController = UINavigationController.init(rootViewController: DriverMainPage())
                }
                if json["user"]["role_id"].intValue == 1 {
                    window.rootViewController = UINavigationController.init(rootViewController: MainPageController())
                }
            }
        }
        UIView.transition(with: window, duration: 0.5, options: .transitionCurlDown, animations: nil, completion: nil)
    }

}

當我在AppDelegate中返回此代碼時,出現錯誤NSException

嘗試在主線程上運行成功塊,例如

重置根控制器:

DispatchQueue.main.async {
    if json["user"]["role_id"].intValue == 2 {
        window.rootViewController = UINavigationController.init(rootViewController: DriverMainPage())
    }
    if json["user"]["role_id"].intValue == 1 {
        window.rootViewController = UINavigationController.init(rootViewController: MainPageController())
    }
}

推送根控制器:

DispatchQueue.main.async {
   if json["user"]["role_id"].intValue == 2 {
        (window.rootViewController as? UINavigationController)?.pushViewController(DriverMainPage(), animated: true)
   }
   if json["user"]["role_id"].intValue == 1 {
        (window.rootViewController as? UINavigationController)?.pushViewController(MainPageController(), animated: true)
   }
}

檢查方法DriverMainPage()/ MainPageController()返回UINavigationController或UIViewController的實例。 這些方法應僅返回UIViewController對象。

如果它返回UINavigationController的實例,則可能會出現以下異常。 “由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:'不支持按下導航控制器'“。

這意味着您將使用不允許的UINavigationController實例實例化UINavigationController。

如果返回UIViewController實例,請使用您得到的Exception編輯您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM