我用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
答案 0 :(得分:0)
尝试在主线程上运行成功块,例如
重置根控制器:
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)
}
}
答案 1 :(得分:0)
检查方法DriverMainPage()/ MainPageController()返回UINavigationController或UIViewController的实例。这些方法应仅返回UIViewController对象。
如果它返回UINavigationController的实例,则您可能会收到以下异常。 “由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'不支持按导航控制器'。
这意味着您正在使用不允许的UINavigationController实例实例化UINavigationController。
如果它返回UIViewController实例,请用您得到的Exception编辑您的问题。