为啥我的用户默认值 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 未在应用程序首次启动时设置?的主要内容,如果未能解决你的问题,请参考以下文章

设置包中的默认值未在 Xamarin.iOS 中加载

为啥谷歌地图在首次启动时不会自动缩放到用户位置?

首次用户体验的启动屏幕看起来不正确 (iOS)

如何设置 iOS 应用程序的首次启动

首次启动应用程序时的 iPhone 通知

如何检测 iOS App 是由特定用户(不是在特定设备上)首次启动的?