当无法访问时,UserDefaults 是否返回默认值或 nil?

Saz*_*han 0 data-protection nsuserdefaults ios ios13

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

  1. UserDefault 获取 NULL
  2. NSUserDefault 丢失

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

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

UserDefaults.standard.register(["FirstTimeAppLaunched", 0]);
Run Code Online (Sandbox Code Playgroud)

当应用程序启动时。第一次启动后我将其设置为 1,

UserDefaults.standard.set(1, forKey: "FirstTimeAppLaunched");
Run Code Online (Sandbox Code Playgroud)

在这种情况下我需要确认,

如果UserDefault由于上述问题而无法访问标准,是否可以保证 key 的返回值FirstTimeAppLaunchedNULL我使用方法注册的默认值UserDefaults.standard.register

vad*_*ian 7

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

默认值为:

  • 键/值对注册

    • 对象是nil
    • 标量类型为false, 0,0.0如果您使用bool(forKey,integer(forKeydouble(forKey
  • 键/值对已注册

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

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