为啥我的用户默认值 bool 未在应用程序首次启动时设置?
Posted
技术标签:
【中文标题】为啥我的用户默认值 bool 未在应用程序首次启动时设置?【英文标题】:Why does my User Defaults bool not set on first launch of app?为什么我的用户默认值 bool 未在应用程序首次启动时设置? 【发布时间】:2017-05-29 01:00:56 【问题描述】:我有一个UserDefault
Bool
用于播放音乐。
第一次启动时,我尝试将 bool 设置为 true,像这样...
if launchedBefore
// Do nothing.
else
UserDefaults.standard.set(true, forKey: "musicOn")
print("music is \(musicOn)")
UserDefaults.standard.set(true, forKey: "alreadylaunched")
这是viewDidAppear()
。
问题是它在第一次启动时没有设置为true,无论我在哪里设置bool,它可能没有launchedBefore
检查,它仍然没有在第一次设置。
我不明白为什么这不起作用? musicOn 在第一次启动时总是等于 false,然后在第二次启动时为 true?
任何见解将不胜感激。谢谢!
【问题讨论】:
您正在使用“musicOn”和“alreadylaunched”键,据我了解,Userdefaults 区分大小写。你在看正确的键吗? 嘿里奥!仔细检查了我的密钥,它们都是一样的,但我确实将它们全部更改为小写,但这不起作用。感谢您的回复! 你能显示你设置launchedBefore
的代码吗?
【参考方案1】:
对我有用的是允许 var musicOn 再次等于用户默认布尔值。
if launchedBefore
// Do nothing.
else
UserDefaults.standard.set(true, forKey: "musicon")
print("music is \(UserDefaults.standard.bool(forKey: "musicon"))")
musicOn = UserDefaults.standard.bool(forKey: "musicon") // Stating it again works to update the bool.
UserDefaults.standard.set(true, forKey: "alreadylaunched")
Var musicOn 已经在任何函数之外实例化,看来它只需要再次设置。
感谢您的 cmets!
【讨论】:
您为什么希望在用户默认值中设置值的行为会影响变量? 我认为由于变量等于用户默认值并且它在 viewDidAppear() 的早期更新,我假设在使用它时,该值已经更新。菜鸟错误!【参考方案2】:你应该使用这样的方法
let launchedBefore = UserDefaults.standard.bool(forKey: "alreadylaunched")
if launchedBefore
// Do nothing.
else
UserDefaults.standard.set(true, forKey: "musicOn")
// print("music is \(musicOn)")
UserDefaults.standard.set(true, forKey: "alreadylaunched")
【讨论】:
以上是关于为啥我的用户默认值 bool 未在应用程序首次启动时设置?的主要内容,如果未能解决你的问题,请参考以下文章