Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone在ViewDid出现之前弹出视图控制器_Iphone_Objective C_Uiviewcontroller - Fatal编程技术网

iPhone在ViewDid出现之前弹出视图控制器

iPhone在ViewDid出现之前弹出视图控制器,iphone,objective-c,uiviewcontroller,Iphone,Objective C,Uiviewcontroller,在我的应用程序中,我有一个登录,如果登录成功,他们将为用户获取一个会话id。当用户的会话过期,他们请求一个包含过期会话的页面时,后端会报告该会话已过期,用户需要重新登录,我的应用程序将调用popToRootViewControllerAnimated(登录页面)。我正在使用NSURLConnection类计划在下载完成时回调我的UIViewController。我遇到的问题是,我在我的viewdiload期间安排了NSURLConnection,并且连接会在视图控制器出现之前报告。我会将NSUR

在我的应用程序中,我有一个登录,如果登录成功,他们将为用户获取一个会话id。当用户的会话过期,他们请求一个包含过期会话的页面时,后端会报告该会话已过期,用户需要重新登录,我的应用程序将调用
popToRootViewControllerAnimated
(登录页面)。我正在使用
NSURLConnection
类计划在下载完成时回调我的
UIViewController
。我遇到的问题是,我在我的
viewdiload
期间安排了
NSURLConnection
,并且连接会在视图控制器出现之前报告。我会将
NSURLConnection
放在
viewdidappease
中,但我不想每次视图出现时都联系服务器。有人知道解决此问题的最佳方法吗?

首先,声明一个枚举变量:

typedef enum {
    StatusLoggedOut,
    StatusAttemptingLogin,
    StatusLoggedIn
} LoginStatus;
然后将成员变量添加到视图控制器以存储登录状态。然后,内部视图显示:您可以执行以下操作:

- (void)viewDidAppear:(BOOL)animated
{
    if (loginStatus == StatusLoggedOut) {
        loginStatus = StatusAttemptingLogin;
        // start the NSURLConnection
    }
}
登录完成后,您可以将状态切换到StatusLoggedIn或StatusLoggedOut(取决于结果)

你可以用一个简单的BOOL侥幸逃脱,但经验告诉我,最好代表州与州之间的所有人


另外,您没有问这个问题,但我认为如果您将登录屏幕显示为模式视图,用户体验会更好;使用
poptrootviewcontroller
会导致用户失去在应用程序中的位置,这很烦人。(除非您正在保存和恢复它,否则您将为自己做大量工作。)

+1关于模式视图控制器登录的非常好的建议。