iOS:处理 App Delegate 中的无效 session

标签 ios objective-c iphone session delegates

我目前正在开发一个需要身份验证的 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/

相关文章:

ios - 当以编程方式将 UITextField 设置为 FirstResponder 时,会导致一些奇怪的文本编辑操作

iphone - 如何从 NSUserDefaults 中取出字符串

iphone - 从后台返回后,计时器循环偶尔崩溃

ios - 存储 iPad/iPhone 应用程序数据的最佳方式

ios - 使用 PVRTexTool 在 PC 上构建纹理数据以在 iOS OpenGL ES 上使用

iphone - 想要将 NSString 作为公式执行

ios - 带有半透明导航栏的滚动条

ios - 调用 NSURLConnection cancel 时会触发 didFailWithError 吗?

ios - 检查一个数组是否包含另一个数组的相同对象的最快方法

iphone - 如何在 iPhone 中创建短信应用程序