2017-07-10 3 views
2

私はviewcontrollerからfirebaseにメディアをアップロードします&私のサーバにメディアのURLをAPIコールとして送信します。画像をアップロードするには&コールAPI私はseprate class.Thereを作成しました。私はURLをreciveとき、私は自分のサーバーに保存されてfirebase & URLにメディアをアップロードしたらすぐに閉鎖でコールバックを受け取ることができませんか?

OfflineSyncクラス関数

func UploadMediaToFireBase(sucess:@escaping()->(),failure:@escaping (DIError)->()) { 


      DIFirebaseImageManager.firebaseInstance.uploadImage(data: data, withName: filepath, mimeType: mimeType, progress: { (progress) 
       in 


      }) { (callback, firebaseUrl, error) in 

       if let url = firebaseUrl { 
        self.uploadplace(place: self.place, done: { 
         sucess() 
         Utility.shared.hideLoader() 

        }, failed: { (result) in 
         failure(result) 
         Utility.shared.hideLoader() 
        }) 
       } 

      } 
     } 

は、今私は、私は、コールバックを送信

func uploadplace(place:place,done:@escaping()->(),failed:@escaping (DIError)->()) { 

      if let placeId = place.id { 
       placeManager.shared.editplace(placeId: placeId, place: place, success: { (success) in 
        AlertBar.show(.success, message: AppMessages.place.placeEdited) 

        done() 
       }, failure: { (failure) in 
        self.status = .cancelled 
        failed(failure) 
       }) 
      } 

    } 

でこの関数を呼び出します私のコントローラに以下のコードで

OfflineSync.shared.UploadMediaToFireBase(sucess: { 
    DILog.print(items: "CallBack to MediaController") 
    self.navigationController?.popViewController(animated: true) 
    }, failure: { (failure) in 

    }) 
    } 

しかし、問題は私のコントローラへのコールバックを得ることは決してありません。私はのコールバックをuplaodmediatofirebase function.Butに持っています。私はcontrollrer.にコールバックを取得しません。

答えて

1

例、

  • failure(result)

  • done()

  • ための同様

    DispatchQueue.main.async{ 
        sucess() 
    } 
    

    、メインスレッド上の閉鎖メソッドを呼び出して試してみてください

そして、他の人のため

  • failed(failure)

  • コードのリファクタリング

    はまた、あなたがif let文のための他の条件を扱っていないようです。このため

    if let url = firebaseUrl { 
            self.uploadplace(place: self.place, done: { 
             sucess() 
             Utility.shared.hideLoader() 
    
            }, failed: { (result) in 
             failure(result) 
             Utility.shared.hideLoader() 
            }) 
           }else{ 
             failure(failureResult) 
           } 
    

    そしてまた、私はcallback.Iを取得することはできません。このissue.Stillを解決することはできませんよ

    if let placeId = place.id { 
           placeManager.shared.editplace(placeId: placeId, place: place, success: { (success) in 
            AlertBar.show(.success, message: AppMessages.place.placeEdited) 
    
            done() 
           }, failure: { (failure) in 
            self.status = .cancelled 
            failed(failure) 
           }) 
          }else{ 
            failed(someFailure) 
          } 
    
    +0

    は失敗 'の値であり、どのようなメインスレッド – Techiee

    +0

    のメソッドを追加しました「失敗」:{(失敗)? –

    +0

    そして、 'editplace'のコードを表示して、おそらく問題を抱えています。 –

    関連する問題