对于我的学士论文,我必须为 iOS 实现一个电子学习应用程序。正如您在我的标题中看到的,我必须在文档目录中下载一个大小接近 1 或 2 GB 的文件。我是 iOS 开发的新手,所以我会很感激我如何处理这个问题的每一个提示。
提前谢谢了!
对于我的学士论文,我必须为 iOS 实现一个电子学习应用程序。正如您在我的标题中看到的,我必须在文档目录中下载一个大小接近 1 或 2 GB 的文件。我是 iOS 开发的新手,所以我会很感激我如何处理这个问题的每一个提示。
提前谢谢了!
很好,您已经阅读了NSURLConnection
和ASIHTTP
。但是你必须知道 ASIHTTP 不再被积极开发/维护。NSURLConnection
很好理解和学习基础知识。
对于日常使用,我建议您使用AFNetworking
. 它使用简单,并包含了解如何使用它的示例。
对于下载大文件,建议将下载的数据直接写入文件,而不是将其存储在内存中。使用AFNetorking
你可以做到这一点,
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:@"download.zip" append:NO];
我没有尝试自己下载这些大数据,但我相信这对你来说是一个很好的起点。
AFNetworking:https ://github.com/AFNetworking/AFNetworking
API 文档:http ://cocoadocs.org/docsets/AFNetworking/2.0.0-RC2/
快乐编码!
好吧,因为这很可能需要一段时间才能下载,所以我绝对建议使用NSURLRequests
和异步执行此操作NSURLConnections
。
不过,我最大的担忧是此下载的纯大小以及它如何可能不适合 RAM,因此此下载实际上可能不像看起来那么容易。您可以试一试,但我建议尽可能将其分解为多个文件/下载。
当我找到我之前编写的代码时,我会在一分钟内发布代码。
添加代码
首先,将需要下载的类设为NSURLConnectionDelegate
and `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
}