Метод Swift Post в AppDelegate для корневого ViewController - PullRequest
0 голосов
/ 29 сентября 2018

Я пишу функцию с методом 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

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Проверьте, что метод DriverMainPage () / MainPageController () возвращает экземпляр UINavigationController или UIViewController.Эти методы должны возвращать только объекты UIViewController.

Если он возвращает экземпляр UINavigationController, возможно, вы получаете следующее исключение.«Завершение работы приложения из-за необработанного исключения« NSInvalidArgumentException », причина:« Выдвижение контроллера навигации не поддерживается »».

Это означает, что вы создаете экземпляр UINavigationController с экземпляром UINavigationController, который не разрешен.

Если он возвращает экземпляр UIViewController, отредактируйте ваш вопрос, используя полученное вами исключение.

0 голосов
/ 29 сентября 2018

Попробуйте запустить блок успеха в главном потоке, например

Сбросить корневой контроллер:

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