TDLR
- 作業メモ・備忘録なので状況がよくわからないかもしれません。
- モーダルを出したらちゃんと消そうということ。
状況
Storyboardを2つ用意しています。
-
- Login周り
-
- その他メイン用
FacebookSDK iOS 4.4を使ってログインして、メインのStoryboardに遷移
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
・
・
// accessTokenとか諸々をアプリ用サーバーに登録したり、RealmやUserDefaultsなんかに保存したり。。。
・
・
// メインのStoryboardのInitialViewControllerへ遷移
var storyboard: UIStoryboard = UIStoryboard(name:"Main", bundle: nil)
var nextVC: UIViewController = storyboard.instantiateInitialViewController() as! UIViewController
self.navigationController?.pushViewController(nextVC, animated: true)
}
FBSDKLoginManager().logOut()でログアウトして、ログイン用のStoryboardに戻る
FBSDKLoginManager().logOut()
let storyboard = UIStoryboard(name: "Login", bundle: nil)
let nextVC = storyboard.instantiateInitialViewController() as! UIViewController
self.presentViewController(nextVC, animated: true, completion: nil)
結果
だいたい以上の様な流れのコードをRunしてみました。
- FBログイン→ログアウト→FBログイン
↑をしたところ、SafariのFBログイン画面でConfirmした後、アプリに戻りましたが、ログイン画面のまま遷移しませんでした。
対応
ログアウト後の画面がモーダルになっていたので、以下のコードを画面遷移に追加しました。
self.dismissViewControllerAnimated(true, completion: nil)
これによってうまく動きました。
疑問
Facebookログインとは別にOAuth2を用いたソーシャルログイン機能も実装していまして、そちらは上記の対応をしなくても問題なく動作していました。
FacebookSDKの中身を覗いても特別複雑な処理はしていませんでした。
同じ画面遷移のコードでどうして動作に差が生まれたのかがわかりません。