¿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?

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()

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 ];

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()

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)
}

4

Actualizado para el código Swift 3.0:

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


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()

-1

Manera rápida

UserDefaults.standard.removeObject(forKey: "aKey")
UserDefaults.standard.synchronize()
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.