2017-07-03 14 views
1

この質問は以前に尋ねられましたが、他の質問の回答は私のために働いていませんでした。ここに私のコードは次のとおりです。ビューはウィンドウの階層にありません

`` `

var values = [String: AnyObject]() 

func loginUserToFirebase(_ completion:() -> Void) { 
    let accessToken = FBSDKAccessToken.current() 
    guard let accessTokenString = accessToken?.tokenString else {fatalError()} 
    let credentials = FIRFacebookAuthProvider.credential(withAccessToken: accessTokenString) 
    FIRAuth.auth()?.signIn(with: credentials, completion: { (user, error) in 
     if error != nil { 
      print(error ?? "Something went wrong") 
      return 
     } 
     self.fbGraphRequest() 
    }) 
} 

internal func fbGraphRequest(){ 
    FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email"]).start { (connection, result, error) in 
     if error != nil { 
      print(error ?? "error unknown") 
      return 
     } else { 
      print(result ?? "no result") 
      self.values = result as! [String: AnyObject] 
      print(self.values) 
      weak var rootViewModel = RootViewModel() 
      rootViewModel?.values = self.values 
      self.presentRootViewController() 
     } 
    } 
} 

internal func presentRootViewController() { 
    let loginController = LoginController() 
    let rootViewController = RootViewController() 
     loginController.present(rootViewController, animated: true, 
completion: nil) 

} 

` ``

、ここでは私のエラーです:私は私のLoginViewControllerでこれを持っていたと私はself.present(rootViewController, animation: true, completion: nil)を使用する場合 Attempt to present <Art_Cache.RootViewController: 0x7fa6a1c2aab0> on <Art_Cache.LoginController: 0x7fa6a1c840b0> whose view is not in the window hierarchy! このスニペットは、働いていました。私のプロジェクトをMVVMに変換しようとしています。これが起こっています。問題はself.presentRootViewController()の周辺にあるようです。これらの機能は、Facebookのログインボタンを押すと起動します。助けて喝采してください!

答えて

1

これは、現在のView Controllerのは、窓の一部ではない場合、あなたは

func topViewController(_ base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { 

     if let nav = base as? UINavigationController { 
      return topViewController(nav.visibleViewController) 
     } 

     if let tab = base as? UITabBarController { 
      let moreNavigationController = tab.moreNavigationController 

      if let top = moreNavigationController.topViewController, top.view.window != nil { 
       return topViewController(top) 
      } else if let selected = tab.selectedViewController { 
       return topViewController(selected) 
      } 
     } 

     if let presented = base?.presentedViewController { 
      return topViewController(presented) 
     } 

     return base 
    } 


    topViewController()?.present(rootViewController, animated: true, 
    completion: nil) 
+0

を変更することができたまたまあなたの先生をお願いします。あなたはロックスターです!私はこのコードのバリエーションを試しましたが、うまくいきませんでしたので、 'UIApplication.shared.keyWindow.rootViewcontroller'が問題だったと思っていませんでした。再びありがとう! –

+0

あなたはナビゲーションとタブの選択も含めました。あなたは本当にロックスターです! –

+0

問題なし、Welcome @ReyCerio。 – SuryaKantSharma

関連する問題