了解UserDefaults注册方法

时间:2018-12-08 14:57:59

标签: swift nsuserdefaults

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

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

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

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

我有以下代码...

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

    UserDefaults.standard.register(defaults: [
        keyUserName:"",
        keyHasCar:false
        ])
}

这就是为什么我感到困惑的原因,当应用程序运行时,它会按预期保存默认值,然后,如果稍后在应用程序中的某个位置修改了这些值,并且在应用程序被杀死并重新启动后立即修改了{{1} }再次被调用,但是值不会被重置,但是如果我向数组添加新键,它的确会被保存,但是其余键不会被重置,只会添加具有默认值的新键。

同样,我不想重置这些值,我只需要了解didFinishLaunchingWithOptions方法的工作原理。

1 个答案:

答案 0 :(得分:7)

摘自register(defaults:)的文档:

  

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

     

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

这意味着注册的默认值是您使用的普通用户默认值的后备。注册的默认设置不会覆盖或替换标准的用户默认设置。

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

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