2017-10-05 1 views
0

私は迅速なIOSアプリケーションでユーザのログイン記録を維持しようとしています。 私は、ユーザーに正常にログインした後に通知を掲示しているログインビューコントローラーを持っています。既存の通知のuserinfoを迅速に変更するにはどうすればよいですか?ユーザがログインしたレコードを維持する必要があります

let infodict = ["userLoggedIn": true] 
NotificationCenter.default.post(name: 
NSNotification.Name(rawValue:"NotificationuserLoggedIn"), object: nil, userInfo: infodict) 

そして、私のホームビューコントローラののviewDidLoadで、私は観察者が「toggleLoginButtonText」関数を呼び出します

NotificationCenter.default.addObserver(self, selector: 
#selector(self.toggleLoginButtonText(_:)), name: 
NSNotification.Name(rawValue:"NotificationUserLoggedIn"), object: nil) 

のようにそれにオブザーバを追加しています。そしてこの機能では、私はログインボタンのテキストをトグルしています。ユーザーがボタンにログインしている場合、テキストは「ログアウト」し、そうでなければ「ログイン」する必要があります。今まではすべてがうまくいきます。

問題:ユーザーがボタンを押してログアウトするたびに、私は同じ通知のユーザー情報を更新します。私の家のコントローラの私のviewwillappearの機能は、私は "toggleLoginButtonText"関数を呼び出し、通知値をチェックします。 "userLoggedIn"(ユーザーがログアウトしたため)の値であれば、私の関数はログインボタンのテキストを変更します。

私の質問は2倍です。

ユーザーがログインする私の通知のuserinfoをを更新する方法を
  1. をログアウトこれはレコードでログインしているユーザーを処理する良い方法です、またはこのよりも良い方法があるのですか?

    私はもう1つ考えています。ユーザーがログアウトしたときに、別の通知を投稿し、それを私のホームコントローラーで観察し、ユーザーが再びログインしたときに、別の通知を送信するなど」。しかし、私は私には繰り返しのようです。

これらの質問に対する回答を探しました。しかし、私が既に渡した通知を使ってデータを渡す方法についての答えだけがあります。

How to pass data using NotificationCentre in swift 3.0 and NSNotificationCenter in swift 2.0?

How to pass data using NotificationCentre in swift 3.0 and NSNotificationCenter in swift 2.0?

答えて

1

もっと良い解決策は、UserDefaultsを使用することです。UserDefaultsにキー "isLoggedIn"のブール値を格納し、ユーザーがログインするとtrueに設定し、ログアウトでfalseを設定します。ホームVCのviewWillappear関数で、キー "isLoggedIn"のUserDefaultsの値(真偽値)を読み込み、必要なものを変更します。

1

ない私が正しくあなたを理解し、もちろん、あなたの通知と異なる辞書を毎回渡すことができるかどうか確認してください。 let infodict = ["userLoggedIn": true]の代わりにlet infodict = ["userLoggedIn": isUserLoggedIn]と入力してください。ここで、isUserLoggedInはログイン状態のBool変数です。

一般的に私はあなたのログイン状態を保持して更新し、すべてのビューコントローラがアクセスできる、LoginManagerのような共有インスタンスを持つことをお勧めします。あなたは、一般的に追いついたのではなく状態のために、より便利です通知、とこれを組み合わせることができ

if LoginManager.shared.isUserLoggedIn { 
    // do something 
} 

:だからあなたのビューコントローラでは、このような何かをチェックすることができます。たとえば、userDidLoginuserDidLogoutのようなevensの通知を使用します。

+0

ログインマネージャへのアクセス方法。それはモジュールかライブラリですか? –

関連する問題