我创建了一个简单的系统,如果userdefaults
有密钥“isWalkthroughPresented”。如果密钥为false
,则显示walkthourghViewController
。如果它没有密钥,则从数据库中检查。
但是第一次没有设置密钥。但是在一些发布后节省了。应该是什么问题?
这是我在用户登录后在viewDidAppear中使用的代码并看到第二个ViewController:
let userDefaults = UserDefaults.standard
if !userDefaults.bool(forKey: "isWalkthroughPresented") {
presentWalkthrough()
userDefaults.set(true, forKey: "isWalkthroughPresented")
}else{
checkIfCurrentUserHasOpenedTheAppBefore()//this just checks if user in db has the value
}
答案 0 :(得分:2)
设置用户默认值后,调用此方法强制将更改保存到数据库:
//...
userDefaults.set(true, forKey: "isWalkthroughPresented")
userDefaults.synchronize()
通常会定期调用synchronize()
方法将缓存的用户设置保存到数据库。您设置"isWalkthroughPresented"
并再次阅读它之间的时间间隔不足以synchronize()
自动调用。
因为此方法[synchronize()]会定期自动调用,所以只有在您无法等待自动同步(例如,您的应用程序即将退出)或者您想要更新用户时才使用此方法默认为磁盘上的内容,即使您没有进行任何更改。