Как удалить все данные UserDefaults? - Свифт [дубликат]

этот вопрос уже есть ответ здесь:

у меня есть этот код, чтобы удалить все UserDefaults данные из приложения:

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

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

но я 10 из строки печати. Разве это не должно быть 0?

2 ответов


проблема в том, что вы печатаете содержимое 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 но просто incase здесь это в Swift.

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