2017-07-10 2 views
2

Ich habe Viewcontroller von wo ich Medien auf Firebase & senden URL von Medien zu meinem Server als API Call.Now für das Hochladen von Bildern & Aufruf-API habe ich seprate Klasse erstellt. Dort habe ich eine Funktion erstellt, die das Hochladen funktioniert. JetztRückruf in Schließung in Swift nicht möglich?

OfflineSync Klasse Funktion

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() 
        }) 
       } 

      } 
     } 

wenn ich url recive nenne ich diese Funktion in

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) 
       }) 
      } 

    } 

Sobald ich von Medien auf Feuerbasis & url auf meinem Server gespeichert Upload dann i Rückruf senden zu meinem Controller wie unten Code

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

    }) 
    } 

Aber Problem ist, ich bekomme nie einen Rückruf zu meinem Controller.Ich bekomme Rückruf von uplaodplace zu uplaodmediatofirebase Funktion.Aber ich bekomme nie Rückruf an meine controllrer.Bitte sagen Sie, was kann das Problem sein?

Antwort

1

Versuchen Verschlussmethoden auf der Main-Thread aufrufen,

Ex,

DispatchQueue.main.async{ 
    sucess() 
} 

Ähnliche für,

  • failure(result)

  • done()

  • failed(failure)

Und für die anderen.

Refaktorierungscode,

Auch es scheint, dass Sie sonst Bedingungen nicht für if let Aussagen behandelt haben.

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) 
       } 

Und auch dafür,

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

Ich bin nicht in der Lage diese issue.Still nicht in der Lage zu lösen, um die callback.I zu erhalten hinzugefügt Verfahren in Hauptthread – Techiee

+0

Was ist der Wert von 'Ausfall 'in' Fehler: {(Fehler) in'? –

+0

Und zeigen Sie den Code von 'Editplace', es hat vielleicht das Problem. –

Verwandte Themen