2017-04-13 2 views
4

J'ai ce code pour supprimer toutes les données UserDefaults de l'application:Comment supprimer toutes les données UserDefaults? - Swift

let domain = Bundle.main.bundleIdentifier! 
UserDefaults.standard.removePersistentDomain(forName: domain) 

print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count) 

Mais je suis 10 de la ligne d'impression. Ne devrait-il pas être 0?

+0

Vérifiez celui http://stackoverflow.com/questions/6797096/delete-all-keys-from-a-nsuserdefaults-dictionary-ios#6797133 –

+0

@RyanPoolos J'ai essayé beaucoup de solutions, je reçois la même résultat '10' – Zizoo

Répondre

18

Le problème est que vous imprimez le contenu de UserDefaults, juste après les effacer, mais vous n'êtes pas manuellement les synchroniser.

let domain = Bundle.main.bundleIdentifier! 
UserDefaults.standard.removePersistentDomain(forName: domain) 
UserDefaults.standard.synchronize() 
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count) 

Cela devrait faire l'affaire.

Vous n'avez normalement pas besoin d'appeler manuellement synchronize, car le système synchronise périodiquement les userDefaults automatiquement, mais si vous devez appuyer immédiatement sur les modifications, vous devez forcer la mise à jour via l'appel synchronize.

The documentation states this

Parce que cette méthode est automatiquement appelée à intervalles réguliers, utiliser cette méthode que si vous ne pouvez pas attendre la synchronisation automatique (par exemple, si votre application est sur le point de quitter) ou si vous voulez mettre à jour les valeurs par défaut de l'utilisateur à ce qui est sur le disque même si vous n'avez fait aucune modification.

+0

En fait, quand j'ai vu 'synchronize()' dans @Ryan Poolos, j'ai essayé de l'utiliser et exactement comme vous, mais je reçois toujours '10' quand j'imprime. Merci – Zizoo

+0

Quelles sont les clés présentes? Essayez de les imprimer pour voir – Lefteris

+0

AppleLanguages, AppleLocal, NSInterfaceStyle, AppleKeyunesStoreItemKinds, AppleKeyboardsExpanded, PKKeychainVersionKey, ApplePasscodeKeyboards, AppleKeyboards, NSLanguages, NSInterfaceStyle ... Je ne sais vraiment pas quelles sont ces choses – Zizoo

6

Cette réponse a été trouvée ici https://stackoverflow.com/a/6797133/563381 mais juste ici, c'est dans Swift.

func resetDefaults() { 
    let defaults = UserDefaults.standard 
    let dictionary = defaults.dictionaryRepresentation() 
    dictionary.keys.forEach { key in 
     defaults.removeObject(forKey: key) 
    } 
} 
+0

Merci, mais j'ai encore' 10' :( – Zizoo

+0

vous n'utilisez jamais 'value', donc vous devriez l'ignorer avec' _' – Alexander

+0

ou mieux encore: 'defaults.dictionaryRepresentation(). keys.forEach (defaults.removeObject (forKey:) ' – Alexander