J'utilise +[NSUserDefaults standardUserDefaults]
pour stocker les paramètres d'application. Cela consiste en une douzaine de valeurs de chaîne. Est-il possible de supprimer définitivement ces valeurs au lieu de simplement les définir sur une valeur par défaut?
ios
objective-c
cocoa-touch
nsuserdefaults
TonyNeallon
la source
la source
Réponses:
Vous pouvez supprimer le domaine persistant de l'application comme ceci:
Dans Swift 3 et versions ultérieures:
Ceci est similaire à la réponse de @samvermette mais est un peu plus propre OMI.
la source
Ce code réinitialise les valeurs par défaut au domaine d'enregistrement:
En d'autres termes, cela
removeObjectForKey
pour chaque clé que vous avez déjà enregistrée dans cette application.Crédits à Ken Thomases sur ce fil de discussion des développeurs Apple .
la source
[NSUserDefaults resetStandardUserDefaults]
ne fait pas cela me dépasse.Avez-vous essayé d'utiliser -
removeObjectForKey
?la source
Voici la réponse dans Swift:
la source
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
one-linerif let domainName = NSBundle.mainBundle().bundleIdentifier { NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName) }
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
Si vous en avez besoin lors du développement, vous pouvez également réinitialiser votre simulateur, en supprimant tous les
NSUserDefaults
.iOS Simulator -> Réinitialiser le contenu et les paramètres ...
Gardez à l'esprit qu'il supprimera également toutes les applications et tous les fichiers du simulateur.
la source
la source
Dans Swift:
la source
Remarque: Cette réponse a également été mise à jour pour Swift.
Qu'en est-il de l'avoir sur une seule ligne?
Étendre la réponse de @Christopher Rogers - celle qui est acceptée.
et oui, parfois vous en aurez besoin
synchronize
,J'ai créé une méthode pour ce faire,
Rapide ?
Avec rapide, c'est encore plus facile.
Et l'utilisation :
la source
J'adore les extensions quand elles rendent le code plus propre:
Swift 5
la source
J'ai trouvé ça:
Source: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab
la source
Toutes les réponses ci-dessus sont très pertinentes, mais si quelqu'un ne peut toujours pas réinitialiser les paramètres utilisateur pour l'application supprimée, vous pouvez réinitialiser les paramètres de contenu de votre simulateur, et cela fonctionnera.
la source
C'est un bug ou autre mais le
removePersistentDomainForName
ne fonctionne pas en effaçant toutes lesNSUserDefaults
valeurs.Donc, la meilleure option est de réinitialiser le
PersistentDomain
et que vous pouvez faire de la manière suivante:la source
Développer la réponse de @ folse ... Je pense qu'une mise en œuvre plus correcte serait ...
... appel de la méthode persistentDomainForName: de NSUserDefault. Comme l'indique la documentation, la méthode "Renvoie un dictionnaire contenant les clés et les valeurs dans le domaine persistant spécifié". Appel à dictionaryRepresentation: renvoie un dictionnaire qui inclura probablement d'autres paramètres, car il s'applique à une portée plus large.
Si vous devez filtrer l'une des valeurs à réinitialiser, alors itérer sur les clés est le moyen de le faire. De toute évidence, si vous souhaitez simplement supprimer toutes les préférences de l'application sans égard, l'une des autres méthodes publiées ci-dessus est la plus efficace.
la source
si le paramètre d'application à réinitialiser est nsuserdefault pour l'accès au microphone (mon cas), une solution simple est la réponse d'Anthony McCormick ( Iphone - Comment activer l'accès des applications aux médias sur le périphérique? - ALAssetsLibraryErrorDomain Code = -3312 "Accès global refusé" ).
sur l'appareil, accédez à Paramètres> Général> Réinitialiser> Réinitialiser les avertissements de localisation
la source
Essayez ça, ça marche pour moi.
Une seule ligne de code
la source