2013-08-22 68 views
-1

對於我的學士論文,我必須爲iOS實施電子學習應用程序。正如您在我的標題中所看到的那樣,我必須在文檔目錄中下載大小接近1或2 GB的文件。我在iOS開發方面很新,所以我很感謝每一個提示我如何處理這個問題。iOS大文件下載〜1GB文件

非常感謝提前!

+0

我已經閱讀了很多關於NSUrlConnection和ASIHTTPRequest的內容......但我不知道是否可以用這兩個選項之一來實現這個功能! – mtStack

+0

這是一個文件嗎?或者有麻煩的文件?你以後想從你的應用中對這些文件做什麼? –

回答

0

那麼,因爲這很可能需要一段時間下載,我絕對會推薦使用NSURLRequestsNSURLConnections異步執行此操作。

雖然我最大的擔心是這個下載的純大小以及它如何不適合RAM,所以這個下載可能並不像看起來那麼容易。你可以給它一個鏡頭,但我會建議將其分解爲多個文件/下載,如果可能的話。

我會在一分鐘後發佈代碼,當我找到以前編寫的代碼時。

添加的代碼

首先,讓你的類,它需要做的下載是一個NSURLConnectionDelegate`NSURLConnectionDataDelegate

然後你可以按如下方式實現下載請求。

NSMutableData *linkData = [[NSMutableData alloc] init]; 
NSURLRequest *linkRequest = [[NSURLRequest alloc] initWithURL:youURL cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:10.0]; 
NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:linkRequest delegate:self]; 

變量linkData應該真正在接口文件中聲明,然後在實施分配的,但爲了簡便起見我剛剛創建它上面的。

然後你需要下面的方法將被稱爲

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [linkData appendData:data]; 
} 

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 
    // handle a fail 
} 

-(void) connectionDidFinishLoading:(NSURLConnection *)connection { 
    // do what you need when download finishes 
} 
1

其良好表明您已經閱讀有關NSURLConnectionASIHTTP。但是,您必須瞭解ASIHTTP不再積極開發/維護。 NSURLConnection很好理解和學習基礎知識。

對於日常使用,我建議你使用AFNetworking。它使用起來很簡單,幷包含了解如何使用它的示例。

對於下載大文件,建議將下載的數據直接寫入文件而不是將其存儲在內存中。使用AFNetorking you can do this by

operation.outputStream = [NSOutputStream outputStreamToFileAtPath:@"download.zip" append:NO]; 

我還沒有嘗試下載大型數據我自己,但我敢肯定,這將是一個很好的起點爲您服務。

AFNetworkinghttps://github.com/AFNetworking/AFNetworking
API文檔http://cocoadocs.org/docsets/AFNetworking/2.0.0-RC2/

編碼愉快!