2017-01-02 4 views
4

Ich habe dynamische Schlüsselgenerierung, um meine Datenbank zu bauen, also muss ich in der Lage sein, alle Schlüssel zu finden, die der Benutzer produzierte, wenn ich wollte Führen Sie einen vollständigen Löschvorgang durch.Swift3 - Wie kann ich alle Schlüssel in Foundation.UserDefaults finden, damit ich alle meine Daten löschen kann

func deleteAllData(){ 
    let userDefaults = Foundation.UserDefaults.standard 
    let keys = userDefaults.dictionaryRepresentation() 
    for key in keys { 
     print(key) 
     userDefaults.removeObject(forKey: String(describing: key)) 
    } 
} 

So bin ich in der richtigen Wörterbuch nicht, weil der Schlüssel Ich bin hier Informationen enthält System greifen wie AppleLocale, PKKeychainVersionKey und AppleKeyboards.

Ich habe einige Funktionen in UserDefaults wie removeSuite, removeVolatileDomain und removePersistentDomain bemerkt. Gibt es einen besseren Weg, meine Daten so zu strukturieren, dass ich diese Methoden verwenden kann, oder kann ich sie bereits verwenden, wenn ich wüsste, was ich als Argument weitergeben kann.

// How I've been setting my data 
userDefaults.set(taskTime, forKey: "\(taskName)_taskTime") 
userDefaults.set(lastRefresh, forKey: "\(taskName)_lastRefresh") 


//Swift2.x delete-all method 
for key in Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys) { 
NSUserDefaults.standardUserDefaults().removeObjectForKey(key) 
} 

Antwort

0

Auf keinen Fall ist dies die schönste Lösung, aber es sollte die Arbeit erledigen. Ich kann bestätigen, dass dictionaryRepresentation() der nächste ist, den du bekommst. Es enthält alle deine Schlüssel, leider enthält es auch all diese anderen Sachen.

Wenn Sie alle Ihre Schlüssel benannt haben, wie Sie in dem Beispiel getan haben, könnten Sie so etwas tun, da sie alle einen Unterstrich enthalten würden.

for key in Array(UserDefaults.standard.dictionaryRepresentation().keys) { 

    if key.element.contains("_") { 
     UserDefaults.standard.removeObject(forKey: key.element) 
    } 

} 

Oder wenn ein _ ich denke nicht arbeiten Sie, wenn der Schlüssel taskTime oder lastRefresh enthalten überprüfen konnten.

+0

Dank Kumpel, fand ich eine ähnliche Lösung. Immer noch unzufrieden, dass auf dem Telefon, das während der Entwicklung erstellt wurde, einige "schwebende" Daten gespeichert sind. Wünschte, es wäre eine Lösche alle Methode –

Verwandte Themen