iOS:处理App Delegate中的无效会话

时间:2014-09-04 01:29:23

标签: ios objective-c iphone session delegates

我目前正在开发需要身份验证的iOS应用。发生无效会话时,我无法转换到登录视图。

我处理此问题的想法是通知应用代理会话已失效;然后,应用程序委托将用户带到登录屏幕。

在我当前的视图控制器中,我有这个代码逻辑来检测无效会话:

if (responseCode == INVALID_AUTHORIZATION) {
    AppDelegate *appdelegate = (AppDelegate *)([UIApplication sharedApplication].delegate);
    [appdelegate invalidateSession];
    return;
}

在我的app委托中,我通过将用户带到根控制器来处理无效授权。

- (void) invalidateSession {
    UINavigationController *navController = (UINavigationController *) self.window.rootViewController;
    [navController popToRootViewControllerAnimated:YES];
}

但是当我这样做时,我收到以下错误:

不平衡调用开始/结束外观转换。

在意外状态下完成导航转换。导航栏子视图树可能已损坏。

想到我在这里做错了什么?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你不应该在AppDelegate中实现pop-push转换,因为在弹出视图控制器之前你无法确定之前的转换是否已经完成 - 这会导致上面提到的问题。

如果您必须在许多屏幕中检查会话,我建议实施一个" super"查看具有名为checkSession的方法的控制器,您可以在其中进行检查并在必要时弹出视图控制器。应该在viewDidAppear中调用此方法,这样您就可以确保在调用popToRootViewController时没有转换不完整。然后,您需要制作所有需要验证超级视图控制器子类的视图控制器,并且您可以继续使用。我希望这对你有用。

P.s:由于你必须在检查会话之前完成显示视图,我想也许一个提示过期会话的弹出窗口对你的UI来说很简洁。