しばらく前に同様の質問を投稿しましたが、選択したソリューションは持続可能でも良いものでもないことがわかりました。ということで、違うアプローチで再挑戦。
これが私の問題です
Facebook ログインを使用してサーバーに接続するアプリを作成しています。したがって、ユーザーは常に Facebook でログインし、user_id を .xml ファイルに保存する必要がありますNSUserDefaults
。アプリでいつでも、2 つのいずれかが存在しない場合は、ユーザーをログイン画面に誘導する必要があります。
同様に、ユーザーが手動でログアウトを押した場合、同じ画面に誘導する必要があります。
を使用しているSWRevealViewController
ので、複数の が必要UINavigationController
です。したがって、popViewController
は機能しません。
これが私のアプリのセットアップです
はinitialViewController
でありUINavigationController
、別の を指していViewController
ます。ここでは、ユーザーが Facebook にサインインしているかどうか、および user_id がNSUserDefaults
. もしそうなら、私は彼らをに案内しますSWRevealViewController
。LoginViewController
そうでない場合は、 (私は を使用します)に誘導しますperformSegueWithIdentifier:
。から、LoginViewController
ユーザーが Facebook と私のサーバーの両方に正常にサインインした後、同じ に誘導しますSWRevealViewController
。
基本的に、 AとA (メニュー)のSWRevealViewController
2 つに分かれています。それらにはそれぞれ独自のものが必要です(私の知る限り、それなしでは機能しませんでした)。sw_front
sw_rear
UINavigationController
ここから、アプリはいくつかの異なるViewControllers
.
この画像でストーリーボードを見ることができます:
(フル解像度の画像へのリンクはこちら)
(ログアウト ボタンは上部の青いボタンで、ログインは最初の青いボタンです)
これが私が試したことです:
前回同様の質問をしたとき、ユーザーがログアウトしたときに関数InitialNavigationController
を使用して提示するソリューションを選択しました。presentViewController
これはうまく機能しているようで、他のアプリも同様に機能しているように見える新しいViewController
ものが提示されましmodally
た (linkedIn などを参照)。
しかし、再度ログインしてみると、FacebookのshowLoggedInUser
メソッドが2回呼び出されているようでした(NSLog()
そこにステートメントを入れました)。3回繰り返すと、3回実行されました。4 回目のログイン、4 回など。
さらに、2 回目のログアウト時に、コンパイラで次のような警告が表示されますWarning: Attempt to present <UINavigationController: 0x13c566730> on <UINavigationController: 0x13c549c70> whose view is not in the window hierarchy!
。ログインとログアウトのプロセスを繰り返すと、この警告も増加し続けます。
私が欲しいもの:
私が理解しているように、私InitialViewController
はモーダルビューとしてスタックに追加し続けていますが、これは私が望むものではありません。初心に帰りたいだけです。または、そのために機能するものなら何でも。シンプルなログイン/ログアウトシステムが機能する限り、私は喜んでいます. ユーザーがログアウトしているように見える場合 (Facebook からログアウトした場合、Facebook がタイムアウトした場合、NSUserDefaults
またはなんらかの理由でリセットされます (たとえば、更新中))。
可能であれば、これを達成するために他のアプリが何をしているのか知りたいです (たとえば、linkedIn、Facebook、Twitter、または他の誰か)。
私が考えていたのは、LoginView
何にも接続されていない別のものを追加することです。これにより、ユーザーがログアウトしているのを見るたびにモーダルにロードできます。ログインが完了するたびに、ビューを閉じるだけで、ユーザーは最後にいた場所に戻ります。
これに関する唯一の問題は、ユーザーがログアウトしても、技術的にはアプリの「内部」にいることですが、ログインせずにモーダル ビュー コントローラーを閉じることはできません。
これは私の問題に対する耐えられる解決策でしょうか?
何を指示してるんですか?
新しいビューを表示する方法/戻る方法 (またはその他の解決策) を示す物理的なコードが望ましいですが、どんな助けも大歓迎です!
これは長い質問であり、おそらく多くの答えがあることはわかっていますが、私はこれに長い間行き詰まっており、自分のセットアップで機能するソリューションが欲しいだけです. だから私はすべてを説明する必要性を感じました。わからないことがあれば遠慮なく聞いてください!
よろしくお願いします!