web-dev-qa-db-de.com

Wie entferne ich alle UserDefaults-Daten? - Swift

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?

27
Zizoo

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.

60
Lefteris

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)
    }
}
27
Ryan Poolos