在我的应用程序中,我有一个登录名,如果登录成功,他们会获得会话ID。当用户的会话到期并且他们请求具有过期会话的页面时,后端报告会话已过期并且用户需要重新登录并且我的应用程序调用{{1}}(登录页面)。我正在使用popToRootViewControllerAnimated
类为我的NSURLConnection
安排回调,以便下载完成。我遇到的问题是我在UIViewController
期间安排NSURLConnection
,并在视图控制器出现之前重新连接报告。我会将viewDidLoad
放在NSURLConnection
中,但每次查看时我都不想联系服务器。有谁知道解决这个问题的最佳方法是什么?
答案 0 :(得分:2)
首先,声明一个枚举变量:
typedef enum {
StatusLoggedOut,
StatusAttemptingLogin,
StatusLoggedIn
} LoginStatus;
然后将一个成员变量添加到视图控制器以存储登录状态。然后,在viewDidAppear里面:你可以这样做:
- (void)viewDidAppear:(BOOL)animated
{
if (loginStatus == StatusLoggedOut) {
loginStatus = StatusAttemptingLogin;
// start the NSURLConnection
}
}
登录完成后,您可以将状态切换为StatusLoggedIn或StatusLoggedOut(取决于结果如何)。
你可以通过一个简单的BOOL逃脱,但经验告诉我,最好代表所有中间状态。
另外,你没有问过这个问题,但我认为如果你将登录界面显示为模态视图会有更好的用户体验;使用popToRootViewController
会导致用户在您的应用中失去位置,这很烦人。 (除非你正在保存和恢复它,在这种情况下,你为自己做了很多工作。)