我正在制作一个iPad应用程序,您可以在其中下载文件(如PDF,doc等)并离线查看。
我已有视图部分,您可以将文件下载到文档目录。 因为现在你需要等待下载完成才能继续。 这可以通过将它放在一个线程中来解决,但是当用户下载多个文件甚至多次下载同一个文件时会发生什么?
我的想法是创建一个下载队列,并查看进度。
工作流:
用户打开文档并按下载,用户会收到下载已启动的消息,可以在离线文档视图中查看。
用户再下载3个文档。
当用户转到离线文档视图时,用户会看到一个包含4个已填充单元格的表格视图。 2个文档已完成加载,另外2个仍在下载,因为表格视图单元格中显示了下载/状态栏。
可以查看或删除下载的文件。
正在进行的下载无法观看,但可以取消。
我想创建一个线程下载类,您可以在其中添加要下载的URL。该类具有取消和删除文档下载的方法,但也有返回进度的方法。 如果可能,该课程可以同时处理下载。
问题是,我不知道从哪里开始?
答案 0 :(得分:3)
NSURLConnection
已经异步。您需要做的就是创建NSURLConnection
个实例,将它们与您的数据结构相关联,并拥有它。
这是一个例子,我假设你每个项目都有一个UIView。如果使用表视图,则不能指望视图实例,而是将下载与NSIndexPath或其他内容相关联。
@implementation MyDownloadView
- (void)startDownload {
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
[req setHTTPMethod:@"GET"];
// Set headers etc. if you need
[[[NSURLConnection alloc] initWithRequest:req delegate:self] autorelease];
[req release];
self.responseData = [[NSMutableData alloc] init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Alternatively, store to a file so you don't run out of memory
[self.responseData appendData:data];
}
@end
然后实现其他NSURLConnection委托方法来执行您需要的操作。
答案 1 :(得分:0)
我编写了一个开源示例,其中包含您想要的所有功能,取消下载目前仅在代码中可用,但为此添加按钮非常简单。
我正在使用asi-http-request来管理下载,它们显示在网格视图(AQGridView)而不是UITableView中,但我认为你明白了。
下载进度通过KVO管理。
首先查看PSPDFDownload.m。 Download the full demo here
完全披露:此演示使用PSPDFKit实现更快的pdf显示。但是Kiosk示例正是您所需要的,并且您不需要使用PSPDFKit进行pdf显示。甚至还有一个使用Apple QuickLook的示例代码路径。