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


85

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

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

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

Respuestas:


140

En la ventana de gdb puede utilizar popara 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 está en el diccionario

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

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


7
¡Hola! ¿Qué es gdb? ¿Qué es po? No estoy seguro de entender ... ¡Gracias por tu ayuda! :)
Martin

1
Ok, descubrí que GDB significa depurador GNU y de hecho es la ventana del depurador de Xcode. Ahora necesito encontrar lo que es po
Martin

18
¡OKAY! Entonces, gdb es de hecho un indicador en la consola, donde puede ingresar comandos. Al escribir "po object_name", se imprimió el contenido del objeto en la consola.
Martin

7
po es un alias para print-object
Brad Cupit

¡Maravilloso! Equivalente a "echo var_dump ()" o "print_r ()" en PHP.
mpemburn

30

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 Ejecutar-> Vista de variables). Esto imprime el resultado del -debugDescriptionmétodo del objeto, que por defecto llama -description. Desafortunadamente, NSDictionaryanula esto para producir un montón de datos internos que generalmente no le interesan, por lo que en este caso específico, la solución de craigb es mejor.

Las claves y valores mostrados también se utilizan -description, por lo que si desea información útil sobre sus objetos en colecciones y en otros lugares, la anulación -descriptiones imprescindible. Generalmente lo implemento de esta manera, para que coincida con el formato de la NSObjectimplementación predeterminada :

- (NSString *) descripción
{
    return [NSString stringWithFormat: @ "<% @% p> {foo:% @}", [self class], self, [self foo]];
}

6

Puede usar CFShow ()

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

En salida verás

{
  bar = foo;
  buz = fiz;
}

3

XCode 4.6 ha agregado la siguiente funcionalidad que puede serle útil

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. ¡Disfrutar!

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


Esto tiene errores para mí, solo muestra parte de mi NSDictionary
Paul Slocum

1

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 dictado


1

Si desea imprimirlos en una acción de punto de interrupción en XCode moderno (sí, ¡estoy 10 años después de la publicación original!) Use la siguiente expresión de punto de interrupción en una acción de "Mensaje de registro":

@ myDictionary.description @

A continuación se muestra una captura de pantalla de mi acción de punto de interrupción donde el evento variable es un NSString y la variable contextData es el NSDictionary del que estoy registrando el contenido :


0

También puede utilizar NSLog .

También puede ir al área de depuración o xcode, luego averiguarlo y All Variables, Registers, Globals and Staticsluego seleccionar su variable. Haz clic derecho sobre él. Luego seleccionePrint description of "...."

¡Espero eso ayude!

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.