2016-03-20 15 views
5

Câu hỏi đơn giản. Nếu tôi đang ở trong một khối hoàn thành - ví dụ như đăng nhập facebook bằng firebase ... và đăng nhập đã thành công. Nếu tôi muốn loại bỏ bộ điều khiển xem hiện tại (login viewcontroller) từ bên trong khối hoàn thành, tôi có cần quay trở lại hàng đợi chính để làm điều này không. Tôi giả định khối hoàn thành đăng nhập đang được thực hiện trên một chuỗi nền và bất kỳ thay đổi nào đối với giao diện người dùng (nghĩa là loại bỏ trình điều khiển chế độ xem hiện tại) sẽ được thực hiện trên chuỗi chính ... ?Swift - loại bỏ bộ điều khiển chế độ xem từ trong khối hoàn thành

@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) 
        } 
      }) 
     } 
    }) 
} 
+0

Cùng một vấn đề là câu trả lời của tôi about performSegue: http://stackoverflow.com/questions/32292600/swift-performseguewithidentifier-not-working/32 292706 # 32292706 – BaseZen

+3

Bạn phải làm điều đó trên chuỗi chính. – ryantxr

Trả lời

9

bạn nên "bật" trở lại chuỗi chính để thực hiện việc này. Của nó khá đơn giản, chỉ cần quấn

self.dismissViewControllerAnimated(true, completion: nil) như thế này ...

trong 2.x Swift

dispatch_async(dispatch_get_main_queue()){ 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 

SWIFT 3:

DispatchQueue.main.async { 
     self.dismiss(animated: true, completion: nil) 
} 
Các vấn đề liên quan