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
?
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.
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.
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)
}
}