【问题标题】:iPhone fail-safe multiple files downloadiPhone 故障安全多文件下载
【发布时间】:2011-04-26 09:11:48
【问题描述】:

我的应用正在从服务器下载图像包。它是一组来自 XML 的直接链接(20-50 个文件)。

  • 如何确保完整下载整组图片?

  • 如果使用 iPhone 按钮关闭应用程序,我如何添加条件以取消整个下载(并删除所有已下载的文件)? (这些方法在 AppDelegate 中,而我的整个下载代码在一些 downloadviewcontroller.m 中)

  • 在下载多个文件时我还有什么需要担心的吗? (总共 5-10 MB)

我目前使用的代码在下载中断或应用关闭的情况下不是很安全。在后台线程中,我为每个文件调用此方法:

    (BOOL) loadImageFromURL:(NSString *)url withName:(NSString *)filename toFolder:(NSString *)folder {

        NSURL *link = [NSURL URLWithString:url];
        NSFileManager *manager = [NSFileManager defaultManager];    
        NSString *filepath = [folder stringByAppendingPathComponent:filename];

        if ([manager fileExistsAtPath:filepath]) {
            return YES;
        }
        else
        { 
            UIImage *image = [[UIImage imageWithData:[NSData dataWithContentsOfURL:link]] retain];
            NSData *data = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0f)];
            if ([data length] <= 0) 
                [image release];
                return NO; // no data
            else 
            {
                [data writeToFile:filepath atomically:YES];
                [image release];            
                return YES;
            }
        }
    }

【问题讨论】:

    标签: iphone cocoa-touch download jpeg


    【解决方案1】:

    使用 nsoperation 这样做

    看看link..

    http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/

    现在在 2012 年 8 月尝试搜索 wwdc 2012 视频编号 211 以了解 nsoperation。 你可以使用块来做到这一点。

    [aNsque addExecutionBlock:^{ ...code... }];
    

    其中 aNsque 是 nsblock 操作。

    【讨论】:

      【解决方案2】:

      不要使用同步调用dataWithContentsOfURL。而是看看如何使用NSURLConnection的异步方法,– initWithRequest:delegate:

      然后您可以使用[connection cancel]; 取消请求,而且您不必在另一个线程上运行它,因为它已经是异步的。

      就运行多个请求而言,您可能有几个选择。一个想法是创建一个启动 NSURLConnection 并解析响应的 abject,然后创建一个这些对象的数组。

      【讨论】:

      • 我是否对一个文件使用一个 NSURLConnection,然后一个接一个地处理文件?对于多个文件,我并没有真正看到任何好的示例,而且我之前已经阅读过 NSURLConnection 文档。我现在在其他线程中使用这个 dataWithContentsOfURL 并且效果很好(3 行代码而不是实现 3+ 方法)但我担心连接中断或应用程序关闭。
      猜你喜欢
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 2015-12-17
      相关资源
      最近更新 更多