我创建了一个包含大约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的样子.
希望能帮助到你.