У меня есть этот код, чтобы удалить все данные 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)
Это должно сделать трюк.
Теперь вы не'т, как правило, нужно позвонить синхронизировать вручную, так как система периодически делает автоматически синхронизировать в userDefaults, но если вам нужно срочно перенести изменения, то необходимо принудительно обновить через синхронизировать
называть.
потому что этот метод вызывается автоматически в определенные интервалы времени, используйте этот метод только если вы не можете ждать для автоматической синхронизации (например, если ваше заявление о выходе) или если вы хотите обновить пользовательский по умолчанию, что на диске, даже если вы не вносили изменений.
Этот ответ нашел здесь 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)
}
}