2016-07-11 13 views
0

私のアプリケーションにサインイン/アウト機能があります。しかし、私は私がログアウトしたときに、私は、現在のユーザからログアウトしてログインしたときに、何かが、NSUSerDefaultがswiftのグローバル変数を更新しない

は私が

var CURRENT_USER_UID = NSUserDefaults.standardUserDefaults().valueForKey("currentUserUid") as? String 

しかし私constants.swiftの下でグローバル変数を持っている私のグローバルユーザー変数と奇妙であることをrelised関数内の記号の最後に、私は以下のprint文を持って、新しい1

print("Sign in successfully. user.uid = \(user?.uid)") 
print("CURRENT_USER_UID = \(CURRENT_USER_UID))") 
print("NSUserDefaults.standardUserDefaults().valueForKey(KEY_USER_UID) \(NSUserDefaults.standardUserDefaults().valueForKey(KEY_USER_UID))") 

これらのプリントアウト

Sign in successfully. user.uid = Optional("3P9uavuLtDQZV8ColwTseBIrY4w1") 

CURRENT_USER_UID = Optional("hakV4smGyveurPhFN7g9rad4xsP2")) 

NSUserDefaults.standardUserDefaults().valueForKey("currentUserUid") Optional(3P9uavuLtDQZV8ColwTseBIrY4w1) 

"hakV4smGyveurPhFN7g9rad4xsP2"は前のユーザーのuserUIDです。 は「3P9uavuLtDQZV8ColwTseBIrY4w1は」私はちょうどログインして現在のユーザーのUIDです。正しく動作している場合、私はすべての3つは「3P9uavuLtDQZV8ColwTseBIrY4w1」であることを期待する

私CURRENT_USER_UIDがNSUserDefaults.standardUserDefaultsと同じものを返さない理由を誰もが知っています().valueForKey( "currentUserUid")??

+0

同じキーで値を設定すると、自動的に古い値が置き換えられ、値が更新されます。 http://iosdevcenters.blogspot.com/2016/05/save-data-using-nsuserdefaults-in-swift.html –

答えて

3

CURRENT_USER_IDには、NSUserDefaultsの変更が反映されません。最初に割り当てられた値は変更されません。値は再び計算されません。

変更されたユーザーIDをCURRENT_USER_IDに割り当てるか(変更する場合)、ユーザーIDを返すグローバル関数を記述することができます(コード内のグローバル変数を変更する方法):

func getCurrentUserId() -> String? 
{ 
    return NSUserDefaults.standardUserDefaults().valueForKey("currentUserUid") as? String 
} 
+0

驚くばかり!私は間違ってグローバル変数を呼び出すときにNSUserdafault関数が呼び出されると思います。お返事ありがとうございました。私は同期ソリューションを試してみたが、それは仕事をしなかったので心配してしまった。 – user172902

0

アプリが起動されたときにあなたのグローバル変数が初期化されるので、それは価値を与えていることNSUserDefaults.standardUserDefaults().valueForKey("currentUserUid")戻り、その点で。ユーザーのデフォルトが更新されると、グローバルは魔法のように再初期化されません。あなた自身で更新する必要があります。

ログインを完了してNSUserDefaultsに保存すると、uidの値をCURRENT_USER_IDに割り当てることができます。

right解決方法はグローバル変数を使用しないことです。適切なクラスにユーザ状態をカプセル化し、これを使用してログイン/ログアウト/現在のユーザを取得する必要があります。

関連する問題