2013-08-19 80 views
0

我正在使用NSURLConection及其委託方法從聯機TTS api異步獲取數據。這是我想負荷的網址:NSURLConnection從重定向的URL獲取數據

http://tts-api.com/tts.mp3?q=hello world

以上URL重定向,並給我們,我需要下載一個MP3文件。我用下面的委託方法下載的MP3文件:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 

    if (connection == connectionToTTSAPI) { 
     mp3Manager = [NSFileManager defaultManager]; 
     localPath = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:@"hello.mp3"]; 
     mp3Handler = [NSFileHandle fileHandleForWritingAtPath:localPath]; 
     if (!mp3Handler) { 
      [[NSFileManager defaultManager] createFileAtPath:localPath contents:nil attributes:nil]; 
      mp3Handler = [NSFileHandle fileHandleForWritingAtPath:localPath]; 
     } 
     @try { 
      [mp3Handler seekToEndOfFile]; 
      [mp3Handler writeData:data]; 
     } 
    } 

} 

由於有多個NSURLConnection的,我用我的節目,我樹立了一個if條件來識別的響應是其連接。但是我沒有收到mp3文件,所以我在委託方法中設置了一個斷點,並發現與TTS API的連接永遠不會得到響應。我認爲這是因爲重定向。我在使用下面的方法時遇到了一些其他問題,但我沒有在NSURLConnectionDelegate中找到這樣的函數,並且也作爲NSURLConnection的入門者,我不知道如何使用該方法來處理重定向。沒有一個結果讓我清楚如何使用它。

- (NSURLRequest *)connection: (NSURLConnection *)inConnection 
      willSendRequest: (NSURLRequest *)inRequest 
      redirectResponse: (NSURLResponse *)inRedirectResponse; 
+0

看起來很腥......你怎麼處理respons?..也有多少「if」條件? –

+0

如果是讓你困惑的if條件,我使用它,因爲我使用多個NSURLConnections。 –

+0

我總是使用AFNetworking(http://afnetworking.com)多次請求/下載featured..bcz它給了我很多控制多重請求... –

回答

0

即委託方法,適用於iOS,在NSURLConnectionDataDelegate定義,讓您有機會來控制重定向是如何處理的(你可以取消它,改變它還是原樣返回)。

你的情況,你想讓它請求URL被重定向響應返回的這麼一個簡單的實現方式是:

- (NSURLRequest *)connection: (NSURLConnection *)inConnection 
     willSendRequest: (NSURLRequest *)inRequest 
     redirectResponse: (NSURLResponse *)inRedirectResponse { 

    return inRequest; 
} 

我相信這應該是默認的行爲了,所以如果請求ISN正在處理,問題可能在其他地方...

+0

抱歉沒有得到你..在哪裏可以返回這個? –

+0

您提供的NSURLConnectionDelegate方法的實現方法...我將更新答案。 – MattR

+0

不,實際上我沒有找到方法' - (*的NSURLRequest)連接:(NSURLConnection的*)inConnection willSendRequest:(*的NSURLRequest)inRequest redirectResponse:(NSURLResponse *)在NSURLConnection的委託inRedirectResponse' 。在哪個委託中聲明瞭該方法? –