2009-09-11 44 views
0

我有一個快樂地運行的應用程序,但自從我更新到OS3.1並更新SDK後,應用程序無法登錄到遠程服務器,因此將連接字符串傳遞給stringWithContentsOfUrl函數。stringWithContentsOfUrl更新到OS3.1後失敗

更新之前,這工作正常,如果我複製顯示在NSLog語句中的文本字符串並粘貼到瀏覽器中,然後我得到正確的響應,但是,這是回覆「LOGIN_ERROR」指示失敗。

任何想法爲什麼這現在失敗了,以及如何解決它?

NSString* userName = [[NSUserDefaults standardUserDefaults] stringForKey:@"username_pref"]; 
    NSString* password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password_pref"]; 
    NSString* loginUrl = [NSString stringWithFormat:@"https://website.com/API/login?email=%@&password=%@", userName, password]; 

    NSLog (@"Logging in as %@ using %@ at [%@]", userName, password, loginUrl); 

    NSURL* url = [NSURL URLWithString:loginUrl]; 
    NSString* loginDetails = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:nil]; 

    if ([loginDetails compare:@"\"LOGIN_ERROR\""] == NSOrderedSame) 
    { 
     DLog (@"Login Failed : LOGIN_ERROR"); 
     self.isLoggedIn = NO; 
    } 
    else 
    { 
     DLog (@"Login Success"); 
     if (userDetails) { 
      [userDetails release]; 
     } 

     NSDictionary* jsonData   = [loginDetails JSONValue]; 

     userDetails      = [[[DMUserDetails alloc] init] retain]; 
     userDetails.id     = [[jsonData objectForKey:@"id"] intValue]; 
     userDetails.api_token   = [jsonData objectForKey:@"api_token"]; 
     userDetails.full_name   = [jsonData objectForKey:@"full_name"]; 
     userDetails.mobile_number  = [jsonData objectForKey:@"mobile_number"]; 
     userDetails.mobile_host   = [jsonData objectForKey:@"mobile_host"]; 
     userDetails.email    = [jsonData objectForKey:@"email"]; 
     userDetails.twitter    = [jsonData objectForKey:@"twitter"]; 
     userDetails.jabber    = [jsonData objectForKey:@"jabber"]; 
     userDetails.msn     = [jsonData objectForKey:@"msn"]; 
     userDetails.start_page   = [jsonData objectForKey:@"start_page"]; 
     userDetails.date_format   = [[jsonData objectForKey:@"date_format"] intValue]; 
     userDetails.time_format   = [[jsonData objectForKey:@"time_format"] intValue]; 
     userDetails.sort_order   = [[jsonData objectForKey:@"sort_order"] intValue]; 
     userDetails.timezone   = [jsonData objectForKey:@"timezone"]; 
     userDetails.tz_offset   = [jsonData objectForKey:@"tz_offset"]; 
     userDetails.premium_until  = [jsonData objectForKey:@"premium_until"]; 
     userDetails.default_reminder = [jsonData objectForKey:@"default_reminder"]; 

     self.isLoggedIn = YES; 
    } 

    [self performSelectorOnMainThread:@selector(didFinishLogon) withObject:nil waitUntilDone:NO]; 
+0

如果您有可能,您可能需要查看Web服務器日誌。 – Eimantas 2009-09-11 20:32:31

+0

不幸的是,它不是我的網絡服務器,所以這是不可能的 – Xetius 2009-09-11 20:40:26

+0

代碼看起來不錯。返回消息是否更改過,可能是不同的服務器之間? – Jordan 2009-09-11 23:41:49

回答

0

最可能的問題是loginDetails是零,指示錯誤檢索URL,而不是你居然收到「登錄錯誤」的迴應。

傳入錯誤對象並記錄錯誤。

+0

服務器在失敗時返回字符串「LOGIN_ERROR」,但我訪問的URL是正確的。如果我將日誌中的字符串複製並粘貼到瀏覽器中,它可以正常工作。 – Xetius 2009-09-12 11:06:36

0

嘗試:

NSError *error = nil; 
NSString *loginDetails = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error]; 

if (error != nil) { 
    NSLog(@"%@", error); 
} 
1

如果您的用戶名是電子郵件地址,並具有在其符號(@),你有沒有嘗試用%40,而不是逃避在URL標誌@的?