web-dev-qa-db-fra.com

Comment supprimer toutes les données UserDefaults? - Swift

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

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

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

Mais j'ai obtenu 10 De la ligne d'impression. Ne devrait-il pas s'agir de 0?

27
Zizoo

Le problème est que vous imprimez le contenu UserDefaults juste après l'avoir effacé, mais que vous ne les synchronisez pas manuellement.

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.

Maintenant, vous n'avez normalement pas besoin d'appeler synchronize manuellement, car le système synchronise périodiquement automatiquement les paramètres utilisateur par défaut. Toutefois, si vous devez appliquer les modifications immédiatement, vous devez forcer la mise à jour à l'aide de la commande synchronize call.

La documentation l'indique

Cette méthode étant automatiquement appelée à intervalles réguliers, utilisez-la uniquement si vous ne pouvez pas attendre la synchronisation automatique (par exemple, si votre application est sur le point de quitter) ou si vous souhaitez mettre à jour les valeurs utilisateur par défaut sur ce qui est sur le disque, même si vous n'avez apporté aucun changement.

60
Lefteris

Cette réponse a été trouvée ici https://stackoverflow.com/a/6797133/563381 mais, en tout cas, elle se trouve ici dans Swift.

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