2011-05-17 14 views

Respuesta

6

Swift 3.0

La respuesta más adelante ya no es el caso cuando probé esto. Cuando se establece en nil, el resultado es NSCFData que se está almacenando. Posiblemente una referencia de objeto NSNull, pero no estoy seguro.

para eliminar por completo un valor clave para un uso UserDefaults.standard.removeObject(forKey: "YourDefault")

He probado 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"))") 
94

Sí, las dos líneas de código son equivalentes, tanto dará lugar a nil leer

id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"]; 

NSUserDefaults devolverá nil si la clave estaba extraviado. Yo recomendaría usar el removeObjectForKey en lugar de establecerlo en cero.

aquí es cómo poner a prueba si el valor de ajuste a cero clave quita la entrada llave del 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 de clave/valor de NSUserDefaults standardUserDefaults

NSLog(@"All contents of NSUserDefaults: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); 
+0

Sí, pero si lo configura en nil ¿lo hace automáticamente 'removeObjectForKey'? – ma11hew28

+0

no estoy seguro si establecerlo en 'nil' eliminará la entrada de clave en [NSUserDefaults standardUserDefaults]. Una prueba rápida sería es conseguir 'AllKeys' [[NSUserDefaults standardUserDefaults] AllKeys] e iterar a través de la NSArrya de los nombres clave, averiguar si el establecimiento de una clave a cero no retire la llave de la serie 'allKey'. – RocketMan

+0

Entonces, ¿cuál es el resultado? – ma11hew28

Cuestiones relacionadas