能够确定UserDefault的自定义套件是否存在,从而在最初创建时启用自定义行为



我正在为UserDefaults:创建一个自定义套件

var store = UserDefaults(suiteName: "custom")

然而,我需要根据套件是否已经存在来触发特定行为。

具体地说,如果套件是而不是,我希望它用预设的键/值对进行初始化。如果被发现,就不需要采取任何特别行动。在现实世界中,想象一个应用程序最初启动时带有预设过滤器,您可以单独删除这些过滤器(即,后续启动指的是过滤器的最新状态,而不是回到预设状态(。

我知道我可以通过检查每个预设的可用性来检查状态,例如:

var found = 0
for key in presetKeys {
if let _ = UserDefaults(suiteName: "custom")?.object(forKey: key) {
found += 1
}
}
if found == 0 {
// empty suite
}

然而,这没有帮助,因为空状态并不表示第一次运行。这可能是因为用户删除了他们自动分配的所有预设。此外,用户还可以创建自己的密钥/值对以添加到套件中。它们的密钥是动态生成的,排除了空状态检查(因为我不知道要查找什么密钥(。

总之,有没有一种方法可以简单地判断指定名称的套件是否已经存在?

如果是,即使移除了所有的键/值对,套件是否仍然存在?我不希望出现用户触发的空状态导致套件被永久删除的情况,从而导致应用程序的下一次运行自动重新加载预设,因为它混淆了空状态和新状态。

希望这是有道理的!

没有内置的方法来检查特定的UserDefaults套件是否已经存在。

但是,您可以创建一个具有Bool值的特殊键,将其用作是否修改任何预设值的标志。

即使移除了所有的键/值对,套件是否仍然存在?

是。UserDefaults套件不需要保存任何值,它可以是空的。从套件中删除所有值不会影响套件本身的存在。

相关内容

  • 没有找到相关文章

最新更新