2011-09-02 59 views
4

我想使用NSMutableRequest和NSURLConnection從服務器獲取壓縮文件。下面是我使用的代碼:NSURLRequest/NSURLConnection ios 5.0 v/s早期版本

NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:downloadUrl 
                    cachePolicy:NSURLRequestReloadIgnoringCacheData 
                  timeoutInterval:30.0]; 


[newRequest setValue:@"Y29tLm5vbWFkZ......" forHTTPHeaderField:@"Authorization"]; 
NSURLConnection *connection = [NSURLConnection connectionWithRequest:newRequest delegate:self]; 
if (!connection) { 
     [self handleDownloadError]; 
} 

,我使用同樣的NSURLConnectionDelegate方法

didReceiveResponse, didReceiveData, connectionDidFinishLoading, didFailWithError 

但是,當我運行的iOS 4.3的代碼或更早版本我得到不同的響應(它下載壓縮文件)和ios 5.0(返回一個JSON,聲稱「身份驗證失敗」。)。

ios 5.0爲NSURLConnectionDelegate引入了許多新方法。但我不確定這是否是關於ios 5.0更改api的問題,或者是以不同方式處理相同請求的服務器代碼。有誰知道可能是什麼問題?

+2

沒有人可以幫助你這個可以談論它,因爲iOS5仍然由NDA覆蓋。你可能想嘗試蘋果開發者論壇。 –

+0

我不確定問題是由於ios 5的更改還是服務器問題。無論如何感謝 – Soni

+0

你需要檢查你的模擬器在ios4.3和ios5上發送的HTTP頭。如果它們相同,則服務器有責任停止以不同的方式對待設備。 – Nick

回答

3

iOS5改變了HTTP標頭大小寫的方式,至少從結尾刪除空格。驗證什麼是您收到的實際HTTP標頭通過打印,到控制檯:

- (void)connection:(NSURLConnection *)aConnection 
    didReceiveResponse:(NSURLResponse *)aResponse 
{ 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)aResponse; 
    NSLog(@"Response headers :%@", [httpResponse allHeaderFields]); 
} 

順便說一句你有沒有注意到,那些您列出方法「通過的iOS 4.3可提供的iOS 2.0」標記爲在蘋果iOS Developer Library docs for NSURLConnection

+2

還有一個尚未記錄的協議,您的委託應符合:NSURLConnectionDataDelegate。它在標題中但尚未記錄。看起來他們已經完成了一半,將這種非正式協議轉換成正式協議。所有相同的方法在那裏,只是定義不同。 – bshirley

相關問題