web-dev-qa-db-fra.com

Comment effacer automatiquement les valeurs NSUserDefault dans Swift?

Comment puis-je effacer automatiquement les valeurs nsuserdefault dans swift? J'ai déjà essayé ça mais ça ne marche pas pour moi ...

[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
21
B.Saravana Kumar

vérifier combien de clés sont déjà stockées

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)

ajouter juste une autre clé

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")

vérifier combien de clés sont déjà stockées à nouveau (+2)

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)

créez maintenant une boucle pour supprimer votre objet pour les clés

for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
    NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}

vérifiez combien de clés vous avez à nouveau

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)

mise à jour: Xcode 7.2.1 • Swift 2.1.1 (note NSUserDefaults ne fonctionne plus dans la cour de récréation, donc il doit être testé dans un vrai projet)

print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")

print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)

for key in Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys) {
    NSUserDefaults.standardUserDefaults().removeObjectForKey(key)
}

print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
37
Leo Dabus

Le Swift contrepartie pour votre code objectif-c est le suivant

 let appDomain = NSBundle.mainBundle().bundleIdentifier!

 NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)

Swift 3.

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain)
69
RameshVel

Solution Swift 3.

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain) 
7
Sourabh Sharma
defaults.setObject(nil, forKey: "userEmail")

en faisant ça, vous mettez zéro, donc vous effacez

6
Danielle Cohen

Il n'y a pas de "suppression automatique". Obtenez simplement toutes les clés NSUserDefaults existantes et définissez-les toutes sur zéro.

Pour obtenir toutes les clés, récupérez NSUserDefaults dictionaryRepresentation et récupérez son keys (allKeys dans Objective-C).

1
matt