¿Cómo eliminar un valor predeterminado de usuario en NSUserDefaults?

79

Es decir, mi aplicación establece algunos valores predeterminados estándar al principio. Entonces, esos valores pueden ser anulados por el usuario. Y cuando el usuario estropea las cosas, quiero volver a establecer esa configuración en los valores predeterminados de mi aplicación. Según tengo entendido, los valores predeterminados de la aplicación son un diccionario diferente a los valores predeterminados del usuario, y los valores predeterminados del usuario simplemente anulan los valores predeterminados de la aplicación. Pero no he visto métodos para eliminar los valores predeterminados del usuario. ¿Alguna idea?


fuente

Respuestas:

97

Usa este código

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"MyKey"];

no olvides sincronizar si quieres guardar inmediatamente

[[NSUserDefaults standardUserDefaults] synchronize];

Referencia de la clase NSUserDefaults

sincronizar : este método se invoca automáticamente a intervalos periódicos, use este método solo si no puede esperar la sincronización automática (por ejemplo, si su aplicación está a punto de salir) o si desea actualizar los valores predeterminados del usuario a lo que está en el disco incluso aunque no ha realizado ningún cambio.

Rápido 5:

UserDefaults.standard.removeObject(forKey: "MyKey")
UserDefaults.standard.synchronize()
Rajneesh071
fuente
2
+1 para [[NSUserDefaults standardUserDefaults] sincronizar]; Normalmente me olvido de agregar esto.
Augustine
si no lo sincroniza, lo sincronizará automáticamente cuando cierre la aplicación.
Yucel Bayram
1
@yucelbayram -> sí, pero si quieres guardar inmediatamente, tienes que sincronizar.
Rajneesh071
1
@ Rajneesh071 sí, eso es cierto.
Yucel Bayram
La documentación de Apple dice actualmente sobre el método de sincronización: "Espera cualquier actualización asincrónica pendiente de la base de datos predeterminada y regresa; este método es innecesario y no debe usarse". Ya no necesitas usar esto.
anders32
8
NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults];
[removeUD removeObjectForKey:@"shoping"];
[[NSUserDefaults standardUserDefaults]synchronize ];
Mohit
fuente
8

Versión rápida para copiar y pegar fácilmente:

var idForUserDefaults = "somestupidtext"
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.removeObjectForKey(idForUserDefaults)
userDefaults.synchronize()

o

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext")
NSUserDefaults.standardUserDefaults().synchronize()
Esqarrouth
fuente
Los documentos de Apple afirman que .synchronize() "es innecesario y no debe utilizarse. Developer.apple.com/documentation/foundation/userdefaults/…
James Jordan Taylor
6

Para eliminar un valor CLAVE específico:

Swift 3+

UserDefaults.standard.removeObject(forKey: "KEY")

Obj-C

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];

Si necesita restablecer los valores predeterminados de usuario / borrar todos los datos :

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

Swift 3:

if let bundle = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundle)
}
Lal Krishna
fuente
4

Actualizado para el código Swift 3.0:

UserDefaults.standard.removeObject(forKey: "YOURKEY")

kbunarjo
fuente
2
Value of type 'UserDefaults' has no member 'remove'
Charlie Fish
1
kbunarjo, ¿incluso probaste esto? LOL. Swift 3 -UserDefaults.standard.removeObject (forKey: "Key")
Jeff
1
@Jeff, recientemente lanzaron una versión más reciente de Swift 3 (3.1). No he echado un vistazo a los documentos todavía, así que supongo que es por eso que mi versión ya no funciona.
kbunarjo
Ya, pensé que era divertido :)
Jeff
1
UserDefaults.standard.removeObject (forKey: "YOURKEY");
Martyn Chamberlin
0

En Swift 4

    UserDefaults.standard.removeObject(forKey: "your_key")
    UserDefaults.standard.synchronize()
Chatar Veer Suthar
fuente
-1

Manera rápida

UserDefaults.standard.removeObject(forKey: "aKey")
UserDefaults.standard.synchronize()
Basir Alam
fuente