【问题标题】:Swift Post method in AppDelegate to root ViewControllerAppDelegate 中的 Swift Post 方法到根 ViewController
【发布时间】:2019-03-05 00:37:19
【问题描述】:

我用 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

【问题讨论】:

  • 请发布例外情况。
  • 你提到push to different ViewControllers,但在你的代码中,你被重置了主窗口的根控制器

标签: ios swift post alamofire appdelegate


【解决方案1】:

尝试在主线程上运行成功块,比如

重置根控制器:

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)
   }
}

【讨论】:

    【解决方案2】:

    检查方法 DriverMainPage()/MainPageController() 返回 UINavigationController 或 UIViewController 的实例。这些方法应该只返回 UIViewController 对象。

    如果它返回 UINavigationController 的实例,您可能会遇到以下异常。 “由于未捕获的异常‘NSInvalidArgumentException’而终止应用程序,原因:‘不支持推送导航控制器’”。

    这意味着您正在使用不允许的 UINavigationController 实例来实例化 UINavigationController。

    如果它返回 UIViewController 实例,那么请用你得到的异常来编辑你的问题。

    【讨论】:

    • 'NSInternalInconsistencyException',原因:'应用程序窗口应在应用程序启动结束时具有根视图控制器'libc++abi.dylib:以未捕获的 NSException 类型异常终止
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2015-07-13
    • 2014-08-29
    相关资源
    最近更新 更多