iPhone故障安全多个文件下载

时间:2011-04-26 09:11:49

标签: iphone cocoa-touch download jpeg

我的应用正在从服务器下载图像包。它是来自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;
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

使用nsoperation来执行此操作

查看打击link ..

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

现在在2012年8月尝试搜索wwdc 2012视频no 211来学习nsoperation。 你可以使用块来这样做。

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

其中aNsque是nsblockoperation。

答案 1 :(得分:2)

请勿使用同步通话dataWithContentsOfURL。而是看看如何使用NSURLConnection的异步方法– initWithRequest:delegate:

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

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