¿Son equivalentes las siguientes dos líneas?
1.
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"example key"]
2.
[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"example key"]
nsuserdefaults
ma11hew28
fuente
fuente
Respuestas:
Swift 3.0
La respuesta a continuación ya no es el caso cuando probé esto. Cuando se establece en
nil
el resultado, se almacena NSCFData. Posiblemente una referencia de objeto NSNull, pero no estoy seguro.Para eliminar completamente un valor para el uso de una clave
UserDefaults.standard.removeObject(forKey: "YourDefault")
Probé con el siguiente código:
fuente
Sí, ambas líneas de código son equivalentes, ambas resultarán en lectura nula
NSUserDefaults
devolverá nil si no se encontró la clave. Recomendaría usar el enremoveObjectForKey
lugar de establecerlo en cero.aquí se explica cómo probar si establecer el valor de la clave en cero eliminó la entrada de la clave
NSUserDefaults standardUserDefaults
.o simplemente volcar el diccionario clave / valor de
NSUserDefaults standardUserDefaults
fuente
removeObjectForKey
?setObject:nil
también eliminará el objeto, no solo su clave. Entonces, ambas funciones causan exactamente el mismo resultado. Además, si elimina (o establece en cero) el único objeto almacenado (y clave), se elimina todo el archivo .plist.Swift 5.0 + iOS 11 y posteriores
Ambos métodos eliminan el valor. Probé esto en un patio de recreo:
Antes de IOS 11 este se traducirá en la serialización
nil
enData
y lanzar un error.fuente