处理NSURLSessionDownloadTask失败

dar*_*iaa 7 objective-c ios nsurlsession nsurlsessiondownloadtask nsurlsessiontask

最初我认为如果NSURLSessionDownloadTask成功完成 URLSession:downloadTask:didFinishDownloadingToURL:方法将被调用,如果由于某种原因失败 - URLSession:task:didCompleteWithError:.它在模拟器上按预期工作(对于一个下载任务只调用此方法中的一个)但在设备上情况并非如此:如果失败,这两个方法都被调用,URLSession:downloadTask:didFinishDownloadingToURL:是第一个.(这两种方法都在参数中传递相同的任务)

有什么我想念的吗?

Nho*_*yen 1

使用完成块而不是委托:

NSURLSessionDownloadTask *mySessionDownloadTask = [myURLSession downloadTaskWithRequest:myRequest completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error)
{
   dispatch_async(dispatch_get_main_queue(), ^{
      if(!error)
       {
           // Finish loading
       }
      else
       {
              // Handle error
        });
}];
Run Code Online (Sandbox Code Playgroud)

注意:如果您没有获取主队列,则与用户界面相关的任何更新都将被延迟,从而导致意外的行为。