2012-05-09 33 views
3

我採取忘記密碼的服務中,我將通過一個電子郵件地址,它會返回JSON承認關於發送的電子郵件閱讀JSON。問題是我無法讀取json中的響應字符串,並且我的異常消息顯示data參數爲nil,但如果我在我的Web瀏覽器中查看該url,則服務看起來很好,如下所述。 我的代碼是:無法從服務

NSURL *url = [LokalmotionCommonTask getURLForgotPassword:emailFieldTxt.text]; 

    NSData* data = [NSData dataWithContentsOfURL: url]; 

    @try { 
     NSError* error; 
     NSDictionary* jsonDict = [NSJSONSerialization 
            JSONObjectWithData:data //1 
            options:0 
            error:&error]; 

     NSLog(@"%@", [jsonDict objectForKey:@"response"]); 
    } 
    @catch (NSException *exception) { 
     NSLog(@"forgot password exception: %@: %@", [exception name], [exception reason]); 
    } 

和服務響應我在Web瀏覽器中得到的是這樣的:

{"status":400,"response":"Your request to change password is already sent. Please check your email."} 

例外:

forgot password exception: NSInvalidArgumentException: data parameter is nil 
+0

它在哪裏‘崩潰’到底是什麼? – Peres

+0

它讀取的行是哪個jsonDict被實例化,然後拋出異常 – Firdous

+0

那麼你有它,數據是零。 – Peres

回答

3
在Objective-C的異常

僅用於致命錯誤,不可恢復錯誤。而不是僅僅檢查無數據:

如果你需要知道什麼是失敗的原因,使用方法:

NSError* error; 
NSURL *url = [LokalmotionCommonTask getURLForgotPassword:emailFieldTxt.text]; 
NSData* data = [NSData dataWithContentsOfURL: url options:NULL error:&error]; 
if (data) { 
    NSDictionary* jsonDict = [NSJSONSerialization 
           JSONObjectWithData:data //1 
           options:0 
           error:&error]; 
    NSLog(@"%@", [jsonDict objectForKey:@"response"]); 
} 
else { 
    NSLog(@"forgot password error, %@", [error localizedFailureReason]); 
} 

有一個命名約定錯誤:getURLForgotPassword:
與開頭的方法名「得到「意味着將會有參考參數返回。最好只命名方法:forgotPasswordURL:

這兩件事,異常和使用get前綴訪問器是java的,從一個基本的差異。

+0

,它仍然爲空。是否是因爲服務響應不符合標準?像'響應'可以直接包含一個字符串或它應該包含一個項目數組? – Firdous

+0

NSLog()url並驗證它。看到我更新的示例代碼和錯誤消息。另外,考慮改變你的問題,以表明提供的響應信息是你所期望的,而不是你所接受的,它現在的方式令人困惑。 – zaph

+0

更改無效。我想獲得在NSDictionary中的響應,它不是越來越,而是變得空,這個問題,仍然令人困惑? – Firdous

1

有錯誤說:data parameter is nil。所以你爲JSON日期傳遞的變量可能是nil
[NSData dataWithContentsOfURL:url]可能返回nil,因爲發生錯誤。嘗試記錄。

而且,即使它只是你要求一個小文件,我會去爲了不阻止用戶界面的異步請求。

+0

我已經提到了上面的迴應和它的價值兩個值。 – Firdous

+0

你怎麼知道它看起來如何?你有'NSLog'嗎? –

+0

我在我的網頁瀏覽器中看到它,事情是,當我從我的網絡瀏覽器看到時它沒問題,但是NSData變爲空 – Firdous

0

解決了通過固定的服務網址,我的網址沒有編碼,並有空格內聯

1

我面臨同樣的問題,問題是,我已經給在URL字符串是URL字符串額外的空間@」 HTTP :......」在URL字符串的開始刪除空間糾正它@‘的https:......’

+0

這並沒有真正回答這個問題。如果您有不同的問題,可以通過單擊[提問](http://stackoverflow.com/questions/ask)來提問。您還可以[添加賞金](http://stackoverflow.com/help/privileges/set-bounties)在您擁有足夠的[聲譽](http://stackoverflow.com/help/)時吸引更多人關注此問題什麼聲譽)。 – Andrei

+0

但是我面對的問題與這個問題中提出的問題完全相同,它幫助了我,這是由於URL字符串的開始處有額外的空間,您可以嘗試它。 – iGauravK