无法访问时,UserDefaults return 是默认值还是 nil?

Does UserDefaults return default value or nil when inaccessible?

我在一个 iOS 项目中工作,该项目在启用文件保护时面临访问 UserDefaults 值的问题。 Apple 社区中有几篇关于 UserDefaults 无法访问问题的帖子。一些讨论是,

  1. UserDefault Getting NULL
  2. NSUserDefault is lost

这对我来说真的很令人沮丧,因为我的应用程序过去常常检查键 FirstTimeAppLaunched 的布尔值,并根据它为我的数据库重新创建 db encryption password 的值。由于上述问题,一旦 UserDefault 无法访问,我的应用程序将重新创建新密码,并最终丢失以前使用不同密码的用户使用的所有数据。

现在我想使用整数状态而不是布尔值,因此我需要使用,

UserDefaults.standard.register(["FirstTimeAppLaunched", 0]);

应用程序启动时。首次启动后,我使用

将其设置为 1
UserDefaults.standard.set(1, forKey: "FirstTimeAppLaunched");

在那种情况下,我需要确认一下,

如果由于上述问题导致标准UserDefault无法访问,是否保证键FirstTimeAppLaunched的返回值为NULL或默认值我使用 UserDefaults.standard.register 方法注册的值?

标量类型(BoolIntDouble)和对象之间存在差异。

默认值为:

  • Key/value 对 注册

    • 对象是 nil,
    • 如果您使用 bool(forKeyinteger(forKeydouble(forKey,则标量类型为 false00.0
  • Key/value对已注册

    • 返回注册值,直到该值被覆盖。

在您的情况下,如果您使用 bool(forKey 读取它,则可以使用未注册的 Bool 值。