2017-05-29 14 views
0

我有一个用户默认布尔音乐播放。为什么我的用户默认布尔没有在第一次启动应用时设置?

当首次推出,我尝试将布尔设置为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,然后在第二次发布时,这是真的吗?

任何有识之士将不胜感激。谢谢!

+0

您正在使用的键“musicOn”和“alreadylaunched”,据我了解Userdefaults是区分大小写的。你在看正确的钥匙? – Leo

+0

嘿,狮子座!双重检查了我的钥匙,他们都是一样的,但我确实把它们全部改为小写,但那不起作用。谢谢回复! – Khoury

+1

你可以在你设置'launchBefore'的地方显示代码吗? – Paulw11

回答

0

对我来说有效的是让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已经被实例化的任何功能外,似乎它只是需要重新设置。

感谢您的意见!

+0

你为什么期望在用户默认值中设置一个值来影响一个变量? – Paulw11

+0

我认为,因为变量等于用户默认值,并且它在viewDidAppear()中提前更新,所以我假定它的使用时间已经更新。菜鸟错误! – Khoury

0

您应该使用的方法类似这样的

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") 

    } 
相关问题