2017-02-23 176 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