2011-04-26 60 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