objective c - objective - NSUserDefaults: volcado de la estructura de NSUserDefaults''s standardUserDefaults
objective c documentation (6)
Aquí hay una clase práctica que puedes usar para volcar todo tipo de basura:
https://github.com/VTPG/CommonCode/blob/master/VTPG_Common.h
Para usarlo, agrega el encabezado a tu "m"
#import "VTPG_Common.h"
luego, en cualquier lugar de tu clase, llama LOG_EXPR (foo):
NSUserDefaults *userDefaults = [[NSUserDefaults alloc] init];
[userDefaults addSuiteNamed:@"com.apple.spaces"];
NSDictionary *foo = [userDefaults dictionaryForKey:@"SpacesDisplayConfiguration"];
LOG_EXPR(foo);
¿Alguien sabe de una manera rápida de volcar los valores predeterminados de usuario de NSUserDefaults a través de NSLog? Esto es lo que tengo:
NSLog(@"NSUserDefaults dump: %@", [NSUserDefaults standardUserDefaults]);
Pero vuelve:
NSUserDefaults dump: <NSUserDefaults: 0x50b520>
... que no es exactamente lo que estoy buscando. Realmente me gustaría tener pares clave-valor.
Cualquier ayuda o un punto en la dirección correcta sería muy apreciado. ¡Aclamaciones!
El NSUserDefaults compartido se inicializa con tres dominios de búsqueda de manera predeterminada (también puede agregar otros si lo necesita): argumentos de la aplicación, preferencias de la aplicación (lo que está almacenado en el plist de la aplicación) y preferencias del sistema localizadas. La última es por qué estás viendo esas claves de Apple desconocidas, pero realmente no tienes que preocuparte por "sobrescribirlas". Si usa el mismo nombre de clave, solo pondrá ese valor en el dominio de preferencias de la aplicación. Las preferencias de su aplicación se buscan antes que las preferencias del sistema para que recupere el mismo valor, pero no afectará a ninguna otra cosa.
Sin embargo, si realmente desea solo las preferencias de su aplicación, puede eliminar los otros dominios de búsqueda (los nombres específicos que necesita están en los documentos).
Gracias a Don McCaughey, mi socio de negocios y amigo, por arreglar mi código para mí y proporcionar una respuesta concisa. Para compartirlo con el resto de ustedes aquí hay un fragmento de código:
NSDictionary *bundleInfo = [[NSBundle mainBundle] infoDictionary];
NSString *bundleId = [bundleInfo objectForKey: @"CFBundleIdentifier"];
NSUserDefaults *appUserDefaults = [[NSUserDefaults alloc] init];
NSLog(@"Start dumping userDefaults for %@", bundleId);
NSLog(@"userDefaults dump: %@", [appUserDefaults persistentDomainForName: bundleId]);
NSLog(@"Finished dumping userDefaults for %@", bundleId);
[appUserDefaults release];
Como puede ver, todos los que respondieron a la pregunta estaban en el camino correcto, pero no se ofreció ningún código fue la solución, hasta que Don editó nuestro código en control de código fuente. ¡Gracias a todos!
Tratar:
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
dictionaryRepresentation devuelve una representación NSDictionary de los valores predeterminados.
NSLog(@"%@ defaults = %@", [self class],
[[NSUserDefaults standardUserDefaults]
persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]);
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);