首先,让我说这不是投诉,我只想了解register(defaults: [])
方法的工作原理。
我正在register(defaults: [])
方法内部使用UserDefaults didFinishLaunchingWithOptions
方法来注册我所有UseDefault密钥的默认值,一切正常。
我的问题是,为什么register(defaults: [])
方法中的值不会在每次调用didFinishLaunchingWithOptions
方法时重置?
我不想让他们休息,我只是想了解原因。
我有以下代码...
func application(...didFinishLaunchingWithOptions...) -> Bool {
UserDefaults.standard.register(defaults: [
keyUserName:"",
keyHasCar:false
])
}
这就是为什么我感到困惑的原因,当应用程序运行时,它会按预期保存默认值,然后,如果稍后在应用程序中的某个位置修改了这些值,并且在应用程序被杀死并重新启动后立即修改了{{1} }再次被调用,但是值不会被重置,但是如果我向数组添加新键,它的确会被保存,但是其余键不会被重置,只会添加具有默认值的新键。
同样,我不想重置这些值,我只需要了解didFinishLaunchingWithOptions
方法的工作原理。
答案 0 :(得分:7)
摘自register(defaults:)
的文档:
如果没有注册域,则使用指定的词典创建一个注册域,并将NSRegistrationDomain添加到搜索列表的末尾。
注册域的内容未写入磁盘;您需要在每次启动应用程序时调用此方法。
这意味着注册的默认值是您使用的普通用户默认值的后备。注册的默认设置不会覆盖或替换标准的用户默认设置。
当您尝试从UserDefaults.standard
查找密钥时,如果该密钥不存在,则会以注册的默认值进行查找,并返回结果(如果有)。
一旦您在UserDefaults.standard
中设置了一个值,当然就是该键所返回的值。如果您从UserDefaults.standard
中删除密钥,则会再次使用注册的默认值。