理解UserDefaults注册方法

24

首先,让我说这不是一篇抱怨,我只是想了解 register(defaults: []) 方法是如何工作的。

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

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

我不想让它们重置,我只是想了解为什么。

我有以下代码...

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

    UserDefaults.standard.register(defaults: [
        keyUserName:"",
        keyHasCar:false
        ])
}
这是我为什么感到困惑的原因:当应用程序运行时,它会按预期保存默认值,然后如果稍后在应用程序的某个位置修改了这些值并立即杀死并重新启动应用程序,didFinishLaunchingWithOptions 会再次被调用,但这些值不会被重置。但是,如果我向数组中添加一个新键,则会保存该键,但是其他键不会被重置,只有新键以其默认值添加。

再次强调,我不希望这些值被重置,我只需要理解register方法的工作方式。

1个回答

36

register(defaults:)的文档说明如下:

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

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接