2009-08-27 25 views
64

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 daña las cosas, quiero volver a establecer esas configuraciones en los valores predeterminados de mi aplicación. Según tengo entendido, los valores predeterminados de la aplicación son un diccionario diferente de 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?¿Cómo eliminar un valor predeterminado del usuario en NSUserDefaults?

Respuesta

88

Usar este código

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

No se olvide de sincronizar si desea guardar inmediatamente

[[NSUserDefaults standardUserDefaults] synchronize]; 

NSUserDefaults Class Reference

sincronizar - Este método se invoca automáticamente a intervalos periódicos , usa este método solo si no puedes espere 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 aunque no haya realizado ningún cambio.

+2

+1 para [[NSUserDefaults standardUserDefaults] sincronizar]; Por lo general, me olvido de agregar esto. – Augustine

+0

@Augustine:) gracias :) – Rajneesh071

+0

si no sincroniza, lo sincronizará automáticamente cuando cierre su aplicación. –

7
NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults]; 
[removeUD removeObjectForKey:@"shoping"]; 
[[NSUserDefaults standardUserDefaults]synchronize ]; 
8

versión Swift para facilitar la copia pegar:

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

o

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext") 
NSUserDefaults.standardUserDefaults().synchronize() 
+0

Los documentos de Apple indican que '.synchronize()' "es innecesario y no debe utilizarse. Https://developer.apple.com/documentation/foundation/userdefaults/1414005-synchronize –

4

Actualización de Swift 3.0 código:

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

+2

' El valor del tipo 'UserDefaults' tiene ningún miembro 'remove'' –

+1

kbunarjo, ¿Has probado esto. LOL. Swift 3 -UserDefaults.standard.removeObject (forKey: "Key") – Jeff

+1

@Jeff Recientemente lanzaron una versión más nueva de Swift 3 (3.1). todavía no he echado un vistazo a los documentos, así que supongo que es por eso que mi versión ya no funciona. – kbunarjo

4

Para quitar una clave específica v alor:

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

Si es necesario restablecer UserDefaults/Borrar todos los datas:

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

Swift 3:

if let bundle = Bundle.main.bundleIdentifier { 
    UserDefaults.standard.removePersistentDomain(forName: bundle) 
} 
Cuestiones relacionadas