對於我的學士論文,我必須爲iOS實施電子學習應用程序。正如您在我的標題中所看到的那樣,我必須在文檔目錄中下載大小接近1或2 GB的文件。我在iOS開發方面很新,所以我很感謝每一個提示我如何處理這個問題。iOS大文件下載〜1GB文件
非常感謝提前!
對於我的學士論文,我必須爲iOS實施電子學習應用程序。正如您在我的標題中所看到的那樣,我必須在文檔目錄中下載大小接近1或2 GB的文件。我在iOS開發方面很新,所以我很感謝每一個提示我如何處理這個問題。iOS大文件下載〜1GB文件
非常感謝提前!
那麼,因爲這很可能需要一段時間下載,我絕對會推薦使用NSURLRequests
和NSURLConnections
異步執行此操作。
雖然我最大的擔心是這個下載的純大小以及它如何不適合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
}
其良好表明您已經閱讀有關NSURLConnection
和ASIHTTP
。但是,您必須瞭解ASIHTTP不再積極開發/維護。 NSURLConnection
很好理解和學習基礎知識。
對於日常使用,我建議你使用AFNetworking
。它使用起來很簡單,幷包含了解如何使用它的示例。
對於下載大文件,建議將下載的數據直接寫入文件而不是將其存儲在內存中。使用AFNetorking
you can do this by,
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:@"download.zip" append:NO];
我還沒有嘗試下載大型數據我自己,但我敢肯定,這將是一個很好的起點爲您服務。
AFNetworking:https://github.com/AFNetworking/AFNetworking
API文檔:http://cocoadocs.org/docsets/AFNetworking/2.0.0-RC2/
編碼愉快!
我已經閱讀了很多關於NSUrlConnection和ASIHTTPRequest的內容......但我不知道是否可以用這兩個選項之一來實現這個功能! – mtStack
這是一個文件嗎?或者有麻煩的文件?你以後想從你的應用中對這些文件做什麼? –