iphone - from - swift 4 userdefaults standard
iPhone-Cómo detectar si existe una clave en NSUserDefaults standardUserDefaults (8)
Usando NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
,
Uso llamadas como BOOL boolFromPrefs = [defaults boolForKey:@"theBoolKey"];
Para obtener un valor BOOL guardado.
Si no se encuentra la clave, se devuelve NO (comportamiento predeterminado de boolForKey).
Pero ... NO puede ser una configuración guardada. Lo mismo para intForKey
Entonces, ¿cómo puedo probar si existe una clave antes de tratar de obtener su valor?
Ejemplo Swift basado en la respuesta de MarkPowell
if (NSUserDefaults.standardUserDefaults().objectForKey("SomeBoolSetting") == nil) {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "SomeBoolSetting")
println("Bool WAS nil")
} else {
var boolValue:Bool? = NSUserDefaults.standardUserDefaults().boolForKey("SomeBoolSetting")
println("Bool WAS NOT nil /(boolValue)")
}
Hágalo de la manera correcta y registre valores predeterminados .
NSDictionary *userDefaultsDefaults = @{
@"SomeKey": @NO,
@"AnotherKey": @"FooBar",
@"NumberKey": @0,
};
[NSUserDefaults.standardUserDefaults registerDefaults:userDefaultsDefaults];
haz esto antes de usar cualquier cosa desde NSUserDefaults
. El comienzo de la application:didFinishLaunchingWithOptions:
es un lugar seguro.
Debe registrar los valores predeterminados cada vez que se inicie la aplicación. NSUserDefaults solo almacena valores que se han establecido explícitamente.
Si usa valores predeterminados, no tiene que usar una marca de verificación para una tecla "isFirstLaunch", como se sugiere en otras respuestas.
Esto lo ayudará cuando despliegue una actualización y desee cambiar el valor predeterminado para un elemento NSUserDefaults
.
Lo hice de esta manera:
NSUserDefaults *prefs = NSUserDefaults.standardUserDefaults;
if ([[prefs dictionaryRepresentation].allKeys containsObject:@"yourKey"]) {
float yourValue = [prefs floatForKey:@"yourKey"];
}
No lo compliques:
if([NSUserDefaults.standardUserDefaults objectForKey:@"yourBoolKey"])
{
// Object Already Stored in User defaults
}
else
{
//Object not stored
}
Puede probar utilizando objectForKey:
y si eso es nil, entonces no está configurado. Todos boolForKey NSNumber
el NSNumber
si lo hay y devuelve un valor BOOL
.
Recomiendo establecer valores predeterminados para cualquier clave que su aplicación pueda usar. Puedes hacer esto en la aplicación: didFinishLaunchingWithOptions: method. De esa forma sabrá que cada valor ha sido establecido.
Sugerencia, establezca una clave llamada "defaultsSet" en SÍ para que solo lo haga una vez. Además, recuerde llamar a [[NSUserDefaults standardUserDefaults] synchronize] para guardar los valores.
Verifique si el objeto existe antes de la conversión a BOOL.
if ([defaults objectForKey:@"theBoolKey"] != nil) {
boolFromPrefs = [defaults boolForKey:@"theBoolKey"];
} else {
boolFromPrefs = DEFAULT_BOOL_VALUE;
}
versión rápida de la respuesta de @Tim Autin:
if contains(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array, "chuiser_cook_orders_dirty") {
println("exist")
}