2011-09-30 73 views
1

在我的應用程序中,我有一個包含通過WS調用獲得的數據的分割視圖。要接收這些數據,用戶必須登錄。要登錄,我應用程序加載時模式地顯示登錄屏幕。輸入憑證後,我打印出isLoggedIn WS調用的結果。這一切工作正常和丹迪。iOS - 通過Webservice登錄

問題是,在登錄屏幕中,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]; 
} 

沒有布埃諾:

- (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

當您希望它們相同時,您是否嘗試將您的用戶輸入與硬編碼字符串進行比較?例如,在你的'[WebservicesController authenticateUserWithName:username and Password:password]'方法中設置一個斷點,並將'username'參數與硬編碼的''user'''字符串進行比較,並將'password'參數與硬編碼' 「傳遞」字符串。我只是想排除這些不匹配的機會(對於編碼或其他原因......隱藏空間等)。在GDB中,執行'print(bool)[username isEqualToString:@「user」]'並且同樣輸入密碼。 – Sam

+0

您應該發佈調用WebServices的方法的代碼! –

回答

0

您的代碼爲例是真不明白,但在你登錄控制器並創建您WebservicesController的實例?

因爲如果你釋放你的登錄控制器,你WebservicesController可能是釋放,因此該認證...

這應該解釋爲什麼它在的appDelegate

0

使用的會話ID的比賽,並WS接收到呼叫,但iPad 似乎在關閉登錄屏幕後刪除會話。

是否有任何代碼可以「刪除」會話?如果是的話,在那裏放置一個斷點,看看它是否被調用。

否則,我的猜測是,畢竟,你是而不是發送與請求正確的會話ID。