在我的应用程序中,我有一个包含通过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];
}
答案 0 :(得分:0)
您的代码示例并不是很清楚,但您是否在登录控制器中创建了WebservicesController实例?
如果你发布登录控制器,你的WebservicesController可能会被释放,那么身份验证......
这应该可以解释为什么它在appDelegate中工作
答案 1 :(得分:0)
会话ID的匹配和WS接收呼叫,但是iPad 似乎在解除登录屏幕时删除会话。
是否有任何可以“删除”会话的代码?如果是这样,在那里放一个断点,看看它是否被调用。
否则,我的猜测毕竟是不正确地发送会话ID。