我创建了一个包含大约8个切换开关的设置包.我想要做的是从设置包中获取默认值.目前我现在有这两种方法:
- func registerSettingsBundle(){
- let appDefaults = [String:AnyObject]()
- UserDefaults.standard.register(defaults: appDefaults)
- UserDefaults.standard.synchronize()
- }
- func updateDisplayFromDefaults(){
- let defaults = UserDefaults.standard
- let update_lot = defaults.bool(forKey: "update_lot")
- print(update_lot)
- }
- override func viewDidLoad() {
- super.viewDidLoad()
- registerSettingsBundle()
- updateDisplayFromDefaults()
- }
然而,这并没有得到我的默认值(这些都是真的,但它们都返回false).如果我关闭应用程序,打开设置,调整设置并重新打开应用程序,这会产生正确的值.有没有获得默认设置?我走了阅读plist的路线,但是如果我更改设置包中的设置,它将不会生效.
解决方法
this does not get me the default values (which are all true,but they
all return false)
看起来你有一个切换开关,在设置包中显示为ON,当你读取包时,你得到所有的错误值.
如果是这种情况,那么你在这里遗漏了一些东西.
在设置bundle(Root.plist)时,我们有“Default Value”字段,它与切换开关的实际默认值无关.这只是一个切换的视觉指示器.
您可以在plist中将“Default value”设置为“YES”,但是当您尝试读取该值时,您最终会变为false.
在这里,我将Root.plist中的Reminder的默认值设置为YES,更新为NO
因此,当应用程序启动时,它显示如上.
但是当我试图读取这些默认值时 – 它们都是假的.
- func getDefaults() {
- let stanDefaults = UserDefaults.standard
- print("Default value of Update - \(stanDefaults.bool(forKey: "update_lot_pref"))")
- print("\nDefault value of Reminder - \(stanDefaults.bool(forKey: "reminder_pref"))")
- }
Default value of Update – false Default value of Reminder – false
现在,如果要同步这些值 – Root.plist中的默认值和默认值 – 那么您必须以编程方式设置它.
- func setApplicationDefault() {
- let stanDefaults = UserDefaults.standard
- let appDefaults = ["reminder_pref": true]
- stanDefaults.register(defaults: appDefaults)
- stanDefaults.synchronize()
- }
在我的Root.plist中,我的默认值为YES,并且当viewDidload我将此首选项值设置为true时.我跑的时候给了我
Default value of Reminder – true
这就是我的Root.plist的样子.
希望能帮助到你.