我目前正在开发一个需要身份验证的 iOS 应用程序。当发生无效 session 时,我无法转换到登录 View 。
我的想法是通过通知应用委托(delegate) session 已经无效来处理这个问题;然后应用程序委托(delegate)会将用户带到登录屏幕。
在我当前的 View Controller 中,我有以下代码逻辑来检测无效 session :
if (responseCode == INVALID_AUTHORIZATION) {
AppDelegate *appdelegate = (AppDelegate *)([UIApplication sharedApplication].delegate);
[appdelegate invalidateSession];
return;
}
在我的应用委托(delegate)中,我通过将用户带到根 Controller 来处理无效授权。
- (void) invalidateSession {
UINavigationController *navController = (UINavigationController *) self.window.rootViewController;
[navController popToRootViewControllerAnimated:YES];
}
但是当我这样做时,出现以下错误:
对开始/结束外观转换的调用不平衡。
在意外状态下完成导航转换。导航栏 subview 树可能会损坏。
有没有想过我在这里做错了什么?谢谢!
最佳答案
我认为您不应该在 AppDelegate 中实现弹出 - 推送转换,因为您无法确定在弹出 View Controller 之前是否完成了先前的转换 - 这会导致上述问题。
如果您必须在多个屏幕中检查 session ,我建议实现一个“ super ” View Controller ,该 Controller 具有名为 checkSession
的方法,您可以在其中进行检查并在必要时弹出 View Controller 。应在 viewDidAppear 中调用此方法,以便确保在调用 popToRootViewController 时没有不完整的转换。然后,您需要制作所有需要验证 super View Controller 子类的 View Controller ,然后就可以开始了。我希望这对您有用。
P.s:由于您必须在检查 session 之前完成 View 的显示,因此我认为提及过期 session 的弹出窗口对于您的 UI 来说可能会很整洁。
关于iOS:处理 App Delegate 中的无效 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656015/