iPhone在ViewDidAppear之前弹出视图控制器

时间:2011-08-02 20:20:05

标签: iphone objective-c uiviewcontroller

在我的应用程序中,我有一个登录名,如果登录成功,他们会获得会话ID。当用户的会话到期并且他们请求具有过期会话的页面时,后端报告会话已过期并且用户需要重新登录并且我的应用程序调用{​​{1}}(登录页面)。我正在使用popToRootViewControllerAnimated类为我的NSURLConnection安排回调,以便下载完成。我遇到的问题是我在UIViewController期间安排NSURLConnection,并在视图控制器出现之前重新连接报告。我会将viewDidLoad放在NSURLConnection中,但每次查看时我都不想联系服务器。有谁知道解决这个问题的最佳方法是什么?

1 个答案:

答案 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会导致用户在您的应用中失去位置,这很烦人。 (除非你正在保存和恢复它,在这种情况下,你为自己做了很多工作。)