Comment supprimer des données de NSUserDefaults? Il y a pas mal de réponses sur la manière de le faire dans l'Objectif C, mais qu'en est-il de Swift? J'ai donc essayé ceci:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey")
N'a pas fonctionné Peut-être que ce que je veux vraiment supprimer n'est pas NSUserDefaults? Voici comment je sauvegarde des données:
class MySavedData: NSObject, NSCoding {
var image: String
init(name: String, image: String) {
self.image = image
}
required init(coder aDecoder: NSCoder) {
image = aDecoder.decodeObjectForKey("image") as! String
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(image, forKey: "image")
}
}
class ViewController: <...> {
var myData = [MySavedData]() //Later myData gets modified and then function save() is called
func save() {
let savedData = NSKeyedArchiver.archivedDataWithRootObject(myData)
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(savedData, forKey: "myKey")
}
}
EDIT: Juste pour effacer certaines choses - les données en cours de sauvegarde sont petites (même pas près de 100 Ko)
Et peut-être que je ne sauvegarde pas de données dans NSUserDefaults (je suis novice en programmation), voici comment je l'obtiens (chargement):
let defaults = NSUserDefaults.standardUserDefaults()
if let savedData = defaults.objectForKey("myData") as? NSData {
myData = NSKeyedUnarchiver.unarchiveObjectWithData(savedData) as! [UserLogin]
}
removeObjectForKey est la bonne voie à suivre.
Cela supprimera la valeur pour la clé sélectionnée. Le code suivant définit une valeur de chaîne pour une clé dans NSUserDefaults, l'imprime puis utilise removeObjectForKey pour supprimer et imprimer à nouveau la valeur de clé. Après removeObjectForKey, la valeur est nil.
let prefs = NSUserDefaults.standardUserDefaults()
var keyValue = prefs.stringForKey("TESTKEY")
print("Key Value not set \(keyValue)")
let strHello = "HELLO WORLD"
prefs.setObject(strHello, forKey: "TESTKEY")
keyValue = prefs.stringForKey("TESTKEY")
print("Key Value \(keyValue)")
prefs.removeObjectForKey("TESTKEY")
keyValue = prefs.stringForKey("TESTKEY")
print("Key Value after remove \(keyValue)")
Résultats:
Valeur de la clé non définie à zéro
Clé Valeur Facultatif ("HELLO WORLD")
Valeur clé après suppression de zéro
let prefs = UserDefaults.standard
keyValue = prefs.string(forKey:"TESTKEY")
prefs.removeObject(forKey:"TESTKEY")
Le code que vous avez écrit fonctionnera correctement, mais NSUserDefaults se synchronise à un certain intervalle de temps.
Comme vous le souhaitez, cela devrait se refléter immédiatement dans NSUserDefaults. Vous devez donc écrire synchroniser
let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey")
defaults.synchronize()
Essaye ça
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
pour Swift 3
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
Mais cela effacera toutes les valeurs de NSUserDefaults.careful lors de l'utilisation.
Je voudrais une solution qui définissant la valeur à nil
pour un clé.
UserDefaults.standard.set(nil, forKey: "key")
NSUserDefaults.standardUserDefaults().setValue(nil, forKey: "key")
NOTE: C’est une déclaration claire et simple, mais gardez à l’esprit qu’il existe une limite à stocker des informations dans NSUserDefaults
, c’est certainement pas le bon endroit pour stocker de gros fichiers binaires (comme par exemple des images) - pour cela il existe un dossier Documents
. Cependant, la taille du var image: String
que vous encodez/décodez n'est pas définie.
Utilisez ce qui suit pour la boucle:
for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}
Suppression de UserDefaults pour la clé dans Swift 3, en fonction de la réponse principale, une syntaxe légèrement différente:
UserDefaults.standard.removeObject(forKey: "doesContractExist")
Swift 4.x Supprimer toutes les clés dans UserDefaults
let defaults = UserDefaults.standard
let dictionary = defaults.dictionaryRepresentation()
dictionary.keys.forEach
{ key in defaults.removeObject(forKey: key)
}
Pour supprimer toutes les clés UserDefaults
, vous pouvez utiliser le code suivant dans Swift 3.x:
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
func remove_pref(remove_key : String){
UserDefaults.standard.removeObject(forKey: remove_key)
UserDefaults.standard.synchronize()
}
Code de mise à jour pour Swift: Utilisé sous la ligne de code pour supprimer les valeurs de clé pour NSUserDefaults dans Swift
UserDefaults.standard.setValue(nil, forKey: "YouEnterKey")