2011-04-26 58 views
4

我的应用程序正在从服务器下载图像包。这是一组来自XML的直接链接(20-50个文件)。iPhone安全多重文件下载

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

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

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

我目前使用的代码在下载中断或应用程序关闭的情况下不是很安全。在后台线程我呼吁每一个文件这种方法:

(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

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

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

只要有多个请求运行,您可能有几个选项。一个想法是创建一个启动NSURLConnection并分析响应的基础,然后创建这些对象的数组。

+1

我是否对一个文件使用一个NSURLConnection,并且只是一个接一个的文件?我没有真正看到多个文件的好例子,我已经阅读过NSURLConnection文档。我现在在其他线程中使用这个dataWithContentsOfURL,它工作得很好(3行代码,而不是实现3+方法),但我担心连接中断或应用程序关闭。 – yosh 2011-04-26 11:30:20