无法访问时,UserDefaults return 是默认值还是 nil?
Does UserDefaults return default value or nil when inaccessible?
我在一个 iOS 项目中工作,该项目在启用文件保护时面临访问 UserDefaults
值的问题。 Apple 社区中有几篇关于 UserDefaults
无法访问问题的帖子。一些讨论是,
这对我来说真的很令人沮丧,因为我的应用程序过去常常检查键 FirstTimeAppLaunched 的布尔值,并根据它为我的数据库重新创建 db encryption password
的值。由于上述问题,一旦 UserDefault
无法访问,我的应用程序将重新创建新密码,并最终丢失以前使用不同密码的用户使用的所有数据。
现在我想使用整数状态而不是布尔值,因此我需要使用,
UserDefaults.standard.register(["FirstTimeAppLaunched", 0]);
应用程序启动时。首次启动后,我使用
将其设置为 1
UserDefaults.standard.set(1, forKey: "FirstTimeAppLaunched");
在那种情况下,我需要确认一下,
如果由于上述问题导致标准UserDefault
无法访问,是否保证键FirstTimeAppLaunched
的返回值为NULL
或默认值我使用 UserDefaults.standard.register
方法注册的值?
标量类型(Bool
、Int
、Double
)和对象之间存在差异。
默认值为:
Key/value 对未 注册
- 对象是
nil
,
- 如果您使用
bool(forKey
、integer(forKey
和 double(forKey
,则标量类型为 false
、0
、0.0
。
Key/value对已注册
- 返回注册值,直到该值被覆盖。
在您的情况下,如果您使用 bool(forKey
读取它,则可以使用未注册的 Bool
值。
我在一个 iOS 项目中工作,该项目在启用文件保护时面临访问 UserDefaults
值的问题。 Apple 社区中有几篇关于 UserDefaults
无法访问问题的帖子。一些讨论是,
这对我来说真的很令人沮丧,因为我的应用程序过去常常检查键 FirstTimeAppLaunched 的布尔值,并根据它为我的数据库重新创建 db encryption password
的值。由于上述问题,一旦 UserDefault
无法访问,我的应用程序将重新创建新密码,并最终丢失以前使用不同密码的用户使用的所有数据。
现在我想使用整数状态而不是布尔值,因此我需要使用,
UserDefaults.standard.register(["FirstTimeAppLaunched", 0]);
应用程序启动时。首次启动后,我使用
将其设置为 1UserDefaults.standard.set(1, forKey: "FirstTimeAppLaunched");
在那种情况下,我需要确认一下,
如果由于上述问题导致标准UserDefault
无法访问,是否保证键FirstTimeAppLaunched
的返回值为NULL
或默认值我使用 UserDefaults.standard.register
方法注册的值?
标量类型(Bool
、Int
、Double
)和对象之间存在差异。
默认值为:
Key/value 对未 注册
- 对象是
nil
, - 如果您使用
bool(forKey
、integer(forKey
和double(forKey
,则标量类型为false
、0
、0.0
。
- 对象是
Key/value对已注册
- 返回注册值,直到该值被覆盖。
在您的情况下,如果您使用 bool(forKey
读取它,则可以使用未注册的 Bool
值。