2017-07-05 3 views
0

を派遣することはできません:はMBProgressHUDを管理する方法を見つけ出すと私はiOSアプリを実装し、サーバーへの写真のアップロード中に次の操作を実行しようとしている

  • Alamofire
  • でスタートアップロードプロセスは進行状況を表示しますMBProgressHUD
  • アップロードが行われ、サーバの応答に応じて、進行状況インジケータ
  • を隠し、メッセージ(成功または失敗)を表示 とインジケータは、ビュー
  • を解任します0

私はそれを達成できません。特に、応答メッセージを2秒間表示した後に表示を閉じることはできません。ここに私のコードです。 どうしたらいいですか?おかげさまで

class ShareViewController: UIViewController { 
    var progressHUD: MBProgressHUD! = nil 

    func sendToServer(image: UIImage, imageName: String) { 

     Alamofire.upload(multipartFormData: { multipartFormData in 
      multipartFormData.append(jpgImageData!, withName: "photos",fileName: fname, mimeType: mime) 
      for (key, value) in parameters { 
       multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) 
      } 
     }, 
         to:url!) 
     { (result) in 
      switch result { 
      case .success(let upload, _, _):   
       upload.uploadProgress(closure: { (progress) in  
        DispatchQueue.main.async(execute: { 
         self.progressHUD.show(animated: true) 
         self.progressHUD.progress = (Float(progress.fractionCompleted)) 
         self.progressHUD.hide(animated: true, afterDelay: 3) 
        }) 

       }) 
       upload.responseJSON { response in 
        if response.response?.statusCode == 200{ 
         if let result = response.result.value { 
          var message = String() 
          message = "200, OK" 

          self.progressHUD.label.text = message 
          self.progressHUD.show(animated: true) 
          self.progressHUD.hide(animated: true, afterDelay: 2) 

          DispatchQueue.main.async(execute: { 
           self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) 
          }) 
         } 
        } 
        else{ 
         var message = String() 
         message = "Not 200, NOK" 

         self.progressHUD.label.text = message 
         self.progressHUD.show(animated: true) 
         self.progressHUD.hide(animated: true, afterDelay: 2) 

         DispatchQueue.main.async(execute: { 
          self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) 
         }) 
        } 
       } 

      case .failure(let encodingError): 
       print(encodingError) 
       var message = String() 
       message = "Failure, NOK" 

       self.progressHUD.label.text = message 
       self.progressHUD.show(animated: true) 
       self.progressHUD.hide(animated: true, afterDelay: 2) 

       DispatchQueue.main.async(execute: { 
        self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) 
       }) 
      } 
     } 
    } 
} 

答えて

0

私は素晴らしい解決策を見出しました。 ビューを閉じる最後のDispatchQueueは、直ちに2秒後には実行されません。コードは次のとおりです。

DispatchQueue.main.asyncAfter(deadline: .now() + 1) { 
           self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) 
          } 

私は役に立つと思います。

関連する問題