Les deux lignes suivantes sont-elles équivalentes?
1.
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"example key"]
2.
[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"example key"]
nsuserdefaults
ma11hew28
la source
la source
Réponses:
Swift 3.0
La réponse ci-dessous n'est plus le cas lorsque j'ai testé cela. Lorsqu'il est défini sur
nil
le résultat, NSCFData est stocké. Peut-être une référence d'objet NSNull, mais je ne suis pas positif.Pour supprimer complètement une valeur pour une utilisation de clé
UserDefaults.standard.removeObject(forKey: "YourDefault")
J'ai testé avec le code suivant:
la source
Oui, les deux lignes de code sont équivalentes, les deux entraîneront une lecture nulle
NSUserDefaults
retournera nil si la clé n'a pas été trouvée. Je recommanderais d'utiliser leremoveObjectForKey
au lieu de le définir sur nil.voici comment tester si la définition de la valeur de clé sur nil a supprimé l'entrée de clé de
NSUserDefaults standardUserDefaults
.ou simplement vider le dictionnaire clé / valeur de
NSUserDefaults standardUserDefaults
la source
removeObjectForKey
?setObject:nil
supprimera également l'objet, pas seulement sa clé. Ainsi, les deux fonctions produisent exactement le même résultat. De plus, si vous supprimez (ou définissez sur nil) le seul objet (et clé) stocké, tout le fichier .plist est supprimé.Swift 5.0 + iOS 11 et plus
Les deux méthodes suppriment la valeur. J'ai essayé cela dans une aire de jeux:
Avant iOS 11 cela se traduira par de sérialisation
nil
dansData
et une erreur.la source