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:
UserDefaults.standard.set(["a", "b", "c"], forKey: "MyDefaults")
print("Test A: My saved defaults \(UserDefaults.standard.object(forKey: "MyDefaults"))")
UserDefaults.standard.set(nil, forKey: "MyDefaults")
print("Test B: My defaults set to nil \(UserDefaults.standard.object(forKey: "MyDefaults"))")
UserDefaults.standard.removeObject(forKey: "MyDefaults")
print("Test C: My defaults removed \(UserDefaults.standard.object(forKey: "MyDefaults"))")
Sí, ambas líneas de código son equivalentes, ambas resultarán en lectura nula
id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"];
NSUserDefaults
devolverá nil si no se encontró la clave. Recomendaría usar el en removeObjectForKey
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
.
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] copy];
for(NSString *key in keys) {
NSLog(@"Key Name: %@", key);
}
[keys release];
o simplemente volcar el diccionario clave / valor de NSUserDefaults standardUserDefaults
NSLog(@"All contents of NSUserDefaults: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
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:
import Foundation
let key = "Test"
let value = "test"
let defaults = UserDefaults.standard
func printUD() {
print("UserDefaults after modification:\n")
defaults.dictionaryRepresentation().forEach { print("\($0): \($1)\n") }
print("-------------\n\n")
}
defaults.set(value, forKey: key); printUD()
defaults.set(nil, forKey: key); printUD()
defaults.set(value, forKey: key); printUD()
defaults.removeObject(forKey: key); printUD()
Antes de IOS 11 este se traducirá en la serialización nil
en Data
y lanzar un error.