Semplice domanda. Se sono all'interno di un blocco di completamento, ad esempio l'accesso a Facebook tramite Firebase ... e l'accesso è riuscito. Se voglio eliminare il controller di visualizzazione corrente (login viewcontroller) dal blocco di completamento, devo tornare alla coda principale per farlo. Suppongo che il blocco di completamento del login sia stato eseguito su un thread in background e che qualsiasi modifica all'interfaccia utente (ovvero l'eliminazione del controller di visualizzazione corrente) debba essere eseguita sul thread principale ... qual è la procedura migliore qui ... o mi manca qualcosa ?Swift - per chiudere il controller della vista da un blocco di completamento
@IBAction func facebookLoginTapped(sender: AnyObject) {
//
let ref = Firebase(url: "https://XXXX.firebaseio.com")
let facebookLogin = FBSDKLoginManager()
facebookLogin.logInWithReadPermissions(["email"], fromViewController: self, handler: { (facebookResult, facebookError) -> Void in
if facebookError != nil {
print("Facebook login failed. Error \(facebookError)")
} else if facebookResult.isCancelled {
print("Facebook login was cancelled.")
} else {
//successfully logged in
//get facbook access token
let accessToken = FBSDKAccessToken.currentAccessToken().tokenString
//use access token to authenticate with firebase
ref.authWithOAuthProvider("facebook", token: accessToken,
withCompletionBlock: { error, authData in
if error != nil {
print("Login failed. \(error)")
} else {
//authData contains
print("Logged in! \(authData)")
//pop loginvc back to uservc - DO I NEED TO GET MAIN THREAD HERE BEFORE DISMISSING VIEW CONTROLLER
self.dismissViewControllerAnimated(true, completion: nil)
}
})
}
})
}
stesso problema la mia risposta su performSegue: http://stackoverflow.com/questions/32292600/swift-performseguewithidentifier-not-working/32 292706 # 32292706 – BaseZen
Devi farlo sul thread principale. – ryantxr