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

时间:2017-04-13 21:29:08

标签: ios swift nsuserdefaults

我有以下代码从应用中删除所有UserDefaults数据:

let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)

print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)

但是我从打印行获得了10。不应该是0

2 个答案:

答案 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}}致电。

The documentation states this

  

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

答案 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)
    }
}