为什么我的用户默认布尔没有在第一次启动应用时设置?
问题描述:
我有一个用户默认布尔音乐播放。为什么我的用户默认布尔没有在第一次启动应用时设置?
当首次推出,我尝试将布尔设置为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,它可能没有launchBefore检查,它仍然没有在第一次设置。
我不明白为什么这不起作用? musicOn在首次发布时总是等于false,然后在第二次发布时,这是真的吗?
任何有识之士将不胜感激。谢谢!
答
对我来说有效的是让var musicOn再次等于用户默认的bool。
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")
}
瓦尔musicOn已经被实例化的任何功能外,似乎它只是需要重新设置。
感谢您的意见!
答
您应该使用的方法类似这样的
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")
}
您正在使用的键“musicOn”和“alreadylaunched”,据我了解Userdefaults是区分大小写的。你在看正确的钥匙? – Leo
嘿,狮子座!双重检查了我的钥匙,他们都是一样的,但我确实把它们全部改为小写,但那不起作用。谢谢回复! – Khoury
你可以在你设置'launchBefore'的地方显示代码吗? – Paulw11