如何删除所有UserDefaults数据? – 斯威夫特

我有这个代码从应用程序中删除所有UserDefaults数据:

 let domain = Bundle.main.bundleIdentifier! UserDefaults.standard.removePersistentDomain(forName: domain) print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count) 

但我从印刷线上得到了10 。 不应该是0吗?

问题是您在清除UserDefaults内容后立即打印,但您没有手动同步它们。

 let domain = Bundle.main.bundleIdentifier! UserDefaults.standard.removePersistentDomain(forName: domain) UserDefaults.standard.synchronize() print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count) 

这应该可以解决问题。

现在您通常不需要手动调用synchronize ,因为系统会定期自动同步userDefaults,但如果您需要立即推送更改,则需要通过synchronize调用强制更新。

文档说明了这一点

因为此方法是定期自动调用的,所以只有在您不能等待自动同步时(例如,如果您的应用程序即将退出)或者您希望将用户默认值更新为磁盘上的内容,请使用此方法你没有做任何改变。

这个答案在这里找到https://stackoverflow.com/a/6797133/563381,但只是在这里它是在Swift。

 func resetDefaults() { let defaults = UserDefaults.standard let dictionary = defaults.dictionaryRepresentation() dictionary.keys.forEach { key in defaults.removeObject(forKey: key) } }