gpt4 book ai didi

objective-c - 在后台线程中下载多个文件

转载 作者:行者123 更新时间:2023-12-01 19:26:37 25 4
gpt4 key购买 nike

我正在制作一个 iPad 应用程序,您可以在其中下载文件(如 PDF、doc 等)并离线查看它们。

我已经有了 View 部分,您可以将文件下载到文档目录。
就像现在一样,您需要等待下载完成才能继续。
这可以通过将它放在一个线程中来解决,但是当用户下载多个文件甚至多次下载同一个文件时会发生什么?

我的想法是创建一个下载队列,以查看进度。

工作流程:

  • 用户打开一个文档并按下下载,用户会收到一条消息,说明下载已开始,并且可以在离线文档 View 中查看。
  • 用户再下载 3 个文档。
  • 当用户转到离线文档 View 时,用户会看到一个包含 4 个填充单元格的表格 View 。 2 个文档已完成加载,另外 2 个仍在下载,因为表格 View 单元格中显示了一个下载/状态栏。
  • 可以查看或删除下载的文档。
  • 正在进行的下载(目前)无法观看,但可以取消。

  • 我想制作一个线程下载类,您可以在其中添加要下载的网址。该类具有取消和删除文档下载的方法,但也具有返回进度的方法。
    如果可能,该类可以处理同时下载。

    问题是,我不知道从哪里开始?

    最佳答案

    NSURLConnection已经是异步的了。您需要做的就是创建NSURLConnection实例,将它们与您的数据结构相关联,并拥有它。

    这是一个示例,我假设每个项目都有一个 UIView。如果您使用 TableView ,则不能指望 View 实例,而是将下载与 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 委托(delegate)方法来做你需要的。

    关于objective-c - 在后台线程中下载多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6996752/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com