我有以下代码从应用中删除所有UserDefaults
数据:
let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)
但是我从打印行获得了10
。不应该是0
?
答案 0 :(得分:54)
问题是您在清除UserDefaults内容后立即打印,但您没有手动同步它们。
let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
UserDefaults.standard.synchronize()
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)
这应该可以解决问题。
现在您通常不需要手动调用synchronize
,因为系统会定期自动同步userDefaults,但如果您需要立即推送更改,则需要通过{强制更新{ {1}}致电。
因为此方法是定期自动调用的,所以只有在您不能等待自动同步时(例如,如果您的应用程序即将退出)或者您希望将用户默认值更新为打开时,才使用此方法即使您没有进行任何更改,也可以使用磁盘。
答案 1 :(得分:23)
这个答案在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)
}
}