Ich habe diesen Code, um alle UserDefaults
Daten aus der App zu entfernen:
let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)
Aber ich habe 10
aus der Druckzeile. Sollte es nicht sein 0
?
Das Problem ist, dass Sie die UserDefaults-Inhalte direkt nach dem Löschen drucken, aber nicht manuell synchronisieren.
let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
UserDefaults.standard.synchronize()
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)
Dies sollte den Trick machen.
Normalerweise müssen Sie synchronize
nicht mehr manuell aufrufen, da das System die userDefaults regelmäßig automatisch synchronisiert. Wenn Sie die Änderungen jedoch sofort übertragen müssen, müssen Sie die Aktualisierung über synchronize
erzwingen. ] Anruf.
Die Dokumentation gibt dies an
Da diese Methode in regelmäßigen Abständen automatisch aufgerufen wird, sollten Sie diese Methode nur verwenden, wenn Sie nicht auf die automatische Synchronisierung warten können (z. B. wenn Ihre Anwendung kurz vor dem Beenden steht) oder wenn Sie die Benutzervorgaben auf die Festplatte aktualisieren möchten Sie haben keine Änderungen vorgenommen.
Diese Antwort finden Sie hier https://stackoverflow.com/a/6797133/563381 aber nur, wenn es hier in Swift ist.
func resetDefaults() {
let defaults = UserDefaults.standard
let dictionary = defaults.dictionaryRepresentation()
dictionary.keys.forEach { key in
defaults.removeObject(forKey: key)
}
}