¿Cómo ver el contenido de la variable NSDictionary en el depurador Xcode?


¿Hay alguna forma de ver los pares clave/valor de una variable NSDictionary a través del depurador Xcode? Aquí está el alcance de la información cuando se expande completamente en la ventana variable:

Variable  Value      Summary
jsonDict  0x45c540   4 key/value pairs
 NSObject {...}
  isa     0xa06e0720

Esperaba que me mostrara cada elemento del diccionario (similar a una variable array).

Author: Ned Batchelder, 2008-09-22

6 answers

En la ventana gdb puede usar po para inspeccionar el objeto.

Dado:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];

Establecer un punto de interrupción después de agregar los objetos, puede inspeccionar lo que hay en el diccionario

(gdb) po dict
{
  bar = foo;
  buz = fiz;
}

Por supuesto, estos son NSString objetos que se imprimen muy bien. YMMV con otros objetos complejos.

 134
Author: craigb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-22 01:51:12

Puede hacer clic con el botón derecho en cualquier variable de objeto (ObjC o Core Foundation) y seleccionar "Imprimir descripción en la consola" (también en la vista Ejecutar->Variables). Esto imprime el resultado del método -debugDescription de obejct, que por defecto llama a -description. Desafortunadamente, NSDictionary anula esto para producir un montón de datos internos que generalmente no le importan, por lo que en este caso específico la solución de craigb es mejor.

Las teclas y valores mostrados también usan -description, por lo que si desea información útil sobre sus objetos en las colecciones y en otros lugares, la sobreescritura -description es una necesidad. Generalmente lo implemento siguiendo estas líneas, para que coincida con el formato de la implementación predeterminada NSObject:

-(NSString *) description
{
    return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]];
}
 30
Author: Jens Ayton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-28 20:23:34

Puedes usar CFShow ()

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);

En la salida verá

{
  bar = foo;
  buz = fiz;
}
 6
Author: uranpro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-27 06:58:53

XCode 4.6 ha agregado la siguiente funcionalidad que puede ser útil para usted

The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger

Ahora puede inspeccionar estos tipos de objetos sin tener que imprimir todo el objeto en la consola. ¡Que lo disfrutes!

Fuente: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html

 3
Author: jkatzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-19 22:06:15

Haga clic en su dict, luego haga clic en el pequeño icono "i", debería hacer el trabajo :-) Xcode5, ver el valor de un diccionario

 1
Author: Taiko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-26 04:48:06

También puede usar NSLog.

También puede ir al área de depuración o xcode, luego averiguar All Variables, Registers, Globals and Statics y luego seleccionar su variable. Haga clic derecho sobre él. Luego seleccione Print description of "...."

Espero que ayude!

 0
Author: user1873574,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-19 13:56:41