2017-02-23 145 views
-1

我在Swift3中有一個很奇怪的問題。我想讓用戶在他上一次會話中進行身份驗證後保持登錄狀態。UserDefault返回不同的值

我的問題是,UserDefaults有時會返回true,有時甚至會在他的帳戶中記錄爲false。這個問題讓我發瘋。我使用存儲在UserDefaults中的bool值,我試圖保存特定的字符串,但問題仍然存在。

任何人有這個問題?任何解決方案

下面是代碼,當我登錄:

UserDefaults.standard.set(true, forKey: LOGIN) 

這是我在AppDelegate代碼didFinishLaunchingWithOptions方法:

if UserDefaults.standard.bool(forKey: LOGIN) { 
    AppData().updateUserInformation() 
} 

回答

1

我建議設置UserDefaults值後調用UserDefaults.standard.synchronize()。許多開發人員表示,你不需要這樣做,iOS會爲你照顧它。

但我發現並非總是如此,尤其是在設置它們後不久讀取值,或者如果應用程序在它們同步之前退出並因此丟失。

+1

UserDefaults不過是一個內存字典,有時候會備份到plist。無論是否同步,都無法立即讀取用戶默認值設置的值。有關完整的詳細信息,請參閱http://stackoverflow.com/a/40809748/1226963。 – rmaddy

+0

我只是說實踐經驗已經顯示出來。從不同線程訪問UserDefaults.standard會加劇這種情況。 – picciano