了解UserDefaults注册方法

fs_*_*gre 7 nsuserdefaults swift

首先,让我说这不是投诉,我只是想了解该register(defaults: [])方法的工作原理。

我在register(defaults: [])方法内使用UserDefaults 方法didFinishLaunchingWithOptions注册所有UseDefault键的默认值,一切工作正常。

我的问题是,为什么register(defaults: [])每次didFinishLaunchingWithOptions调用该方法时都不重置该方法中的值?

我不想让他们休息,我只是想了解原因。

我有以下代码...

func application(...didFinishLaunchingWithOptions...) -> Bool {

    UserDefaults.standard.register(defaults: [
        keyUserName:"",
        keyHasCar:false
        ])
}
Run Code Online (Sandbox Code Playgroud)

这就是为什么我的困惑是,当应用程序运行时,它会按预期方式保存默认值,然后,如果稍后在应用程序中的某个位置修改了这些值,并且在该应用程序被杀死并重新启动后立即didFinishLaunchingWithOptions被再次调用,但这些值确实不会重置,但是如果我向阵列添加新密钥,它会被保存,但是其余密钥不会重置,只会添加具有默认值的新密钥。

同样,我不希望重置值,我只需要了解register方法是如何工作的。

rma*_*ddy 9

从文档中register(defaults:)

如果没有注册域,则使用指定的词典创建一个注册域,然后将NSRegistrationDomain添加到搜索列表的末尾。

注册域的内容不写入磁盘;您需要在每次启动应用程序时调用此方法。

这意味着注册的默认值将作为您正在使用的正常用户默认值的后备。注册的默认值不会覆盖或替换标准的用户默认值。

当您尝试从中查找密钥时UserDefaults.standard,如果该密钥不存在,则会在已注册的默认值中查找该密钥,并返回结果(如果有)。

一旦在中设置了值UserDefaults.standard,当然就是该键返回的值。如果从中删除密钥,UserDefaults.standard则将再次使用注册的默认值。