2017-01-25 5 views
1

Это как мой completionHandler выглядит следующим образом:Swift 3: Transfer Utility, как повторить загрузку после сбоя?

self.completionHandler = { (task, error) -> Void in 
     DispatchQueue.main.async(execute: { 
      if ((error) != nil){ 

       //retry upload 
      } 

      else{ 

       //success 
      } 
     }) 

    } 

Я не вижу какой-либо метод, я могу позвонить на task, чтобы повторить его, я вижу только continue метод, но не знает, как использовать его.

Я начинаю загружать в первый раз следующим образом:

transferUtility.uploadData(
     data as Data, 
     bucket: "test", 
     key: "testTU3/try\(Date()).jpeg", 
     contentType: "image/jpeg", 
     expression: expression, 
     completionHander: completionHandler).continue(successBlock: { (task) -> AnyObject! in 
      if let error = task.error { 
       NSLog("Error: %@",error.localizedDescription); 

      } 
      if let exception = task.exception { 
       NSLog("Exception: %@",exception.description); 

      } 
      if let _ = task.result { 

       NSLog("Upload Starting!") 
       // Do something with uploadTask. 
      } 

      return nil; 
     }) 

Как Попробовать добавить в completionHandler после аварии?

EDIT:

вот что я пытался

self.completionHandler = { (task, error) -> Void in 
     DispatchQueue.main.async(execute: { 
      if ((error) != nil){ 
       guard let data = task.request?.httpBody else {return} 
       self.uploadData(data: data as NSData, bucket: task.bucket, key: task.key) 

      } 

      else{ 
      } 
     }) 
    } 

Но проблема в том, что я не могу получить фактические данные запроса, так как

task.request?.httpBody вычисляет ноль.

Такой подход - хорошая идея? Я знаю, что это может привести к бесконечной ходовой петле

ответ

0

Утилита переноса не поддерживает повторные попытки, вам придется сделать вызов самостоятельно после сбоя.

Что касается вашего кода. Если вы вызываете метод continue(successBlock:), код внутри блока будет выполняться только при успешной загрузке. Существует еще одна вариация continue(block:), которая будет выполняться даже при возникновении ошибки.

+0

спасибо, см. Мое редактирование выше – DCDC

+0

какие данные вы ожидаете получить? – donkon

+0

Я думал, что это будут данные, которые я отправил в этом запросе раньше, в моем случае это изображение – DCDC