iOS - 通过Webservice登录

时间:2011-09-30 07:50:00

标签: ios web-services ipad

在我的应用程序中,我有一个包含通过WS调用获取的数据的splitview。要接收此数据,用户必须登录。要登录,我会在应用程序加载时以模态方式显示登录屏幕。输入凭据后,我打印出来自isLoggedIn WS调用的结果。这一切都很好,花花公子。

问题是,在登录屏幕中,isLoggedIn返回用户成功登录(包括会话ID),但是当我关闭登录屏幕时,每个WS调用都会失败,因为用户未登录。会话ID的匹配和WS接收呼叫,但iPad似乎在解除登录屏幕后删除会话。这会产生以下日志:

2011-09-30 09:37:05.335 DSApp[366:707] url call: http://***/ipadwebservice.asmx/authenticateUser?username=user&password=pass
2011-09-30 09:37:05.508 DSApp[366:707] Call succesful. 
2011-09-30 09:37:05.509 DSApp[366:707] Logged in successfully.
2011-09-30 09:37:05.511 DSApp[366:707] Dismissing LoginView.
2011-09-30 09:37:08.644 DSApp[366:7d0f] url call: http://***/ipadwebservice.asmx/getChildFoldersByFolderID?folderId=-1
2011-09-30 09:37:08.649 DSApp[366:7d0f] Call failed. (Reason: User not logged in!)
2011-09-30 09:37:09.493 DSApp[366:7d0f] url call: http://***/ipadwebservice.asmx/getDocumentsByFolderId?folderId=-1
2011-09-30 09:37:09.497 DSApp[366:7d0f] Call failed. (Reason: User not logged in!)

另一个奇怪的事情是,当我对登录详细信息进行硬编码并使用applicationDidFinishLaunching方法调用时,一切都运行良好,所有WS调用都会成功收到。

布埃诺:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
# warning hardcode login
    [WebservicesController authenticateUserWithName:@"user" andPassword:@"pass"];

    self.window.rootViewController = self.splitViewController;

    //login
    LoginViewController *loginView = [LoginViewController new];
    loginView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self.splitViewController presentModalViewController:loginView animated:YES];
    [loginView release];
}

没有bueno:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    # warning hardcode login
        //[WebservicesController authenticateUserWithName:@"user" andPassword:@"pass"];

        self.window.rootViewController = self.splitViewController;

        //login
        LoginViewController *loginView = [LoginViewController new];
        loginView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        [self.splitViewController presentModalViewController:loginView animated:YES];
        [loginView release];
    }

2 个答案:

答案 0 :(得分:0)

您的代码示例并不是很清楚,但您是否在登录控制器中创建了WebservicesController实例?

如果你发布登录控制器,你的WebservicesController可能会被释放,那么身份验证......

这应该可以解释为什么它在appDelegate中工作

答案 1 :(得分:0)

  

会话ID的匹配和WS接收呼叫,但是iPad   似乎在解除登录屏幕时删除会话。

是否有任何可以“删除”会话的代码?如果是这样,在那里放一个断点,看看它是否被调用。

否则,我的猜测毕竟是正确地发送会话ID。