2010-08-11 10 views
29

Sé que puede sonar como una pregunta estúpida, ya que es una característica trivial en la mayoría de los IDEs modernos, pero estoy inmerso en el desarrollo de iOS y me estoy familiarizando con la plataforma y SDK y no puedo resolver esto. Tengo una tonelada de experiencia con MS Visual Studio y veo que Xcode funciona de manera muy similar, aunque todavía tiene bastante funcionalidad en comparación, pero sigue siendo un IDE muy bueno. Cuando se trata de la depuración, Xcode funciona de manera muy similar a Visual Studio, ya que puede pasar el mouse sobre una variable y mostrará su valor actual. Sin embargo, cuando se trata de variables de objeto, casi siempre da solo la dirección junto con la flecha de expansión, que se expande a "NSObject", que se expande a "isa", que se expande a todos los atributos que no me dicen nada. Estoy acostumbrado al IDE, como Visual Studio, siendo lo suficientemente inteligente como para hacer una introspección y mostrar para mí el objeto real y todas sus propiedades y valores inmediatos. Supongo que Xcode es lo suficientemente inteligente como para hacer esto y simplemente no lo estoy usando correctamente.¿Cómo puedo ver los valores dentro de un objeto en el depurador de Xcode?

Si establezco un punto de interrupción en una línea de código que implica una instancia de objeto (digamos instancia de NSDateComponents), ¿cómo puedo ver los valores de sus propiedades (por ejemplo, año, semana, día, hora, etc.)?

Gracias de antemano por su ayuda!

Editar: Aquí hay una captura de pantalla de la información que obtengo con cada objeto Inspecciono ... alt text http://joecrotchett.com/images/misc/example.jpg

+0

Esto es bastante raro. Debería mostrarte los datos reales. ¿Sucede de esa manera para todas las clases? – zneak

+3

realmente, esto es anormal? sí, sucede todo el tiempo. – BeachRunnerFred

+0

¿Sucede para todos los objetos o simplemente 'NSDateComponents'? – kubi

Respuesta

28

Es frustrante. El depurador debe conocer la estructura de cada objeto y aparentemente no. Sin embargo, solía ser mucho peor. Al igual que con NSArray, son una matriz de objetos. El depurador no sabe qué tipo de objetos específicamente, y eso se debe al lenguaje Objective-C, no al depurador.

Al sumergirse en el desarrollo de iOS, creo que va a encontrar que Apple está a 15 años de sus competidores en lo que respecta al desarrollo. Eso no es una broma. Pero se están poniendo al día y, créanme, ¡era mucho peor!

+0

Guau, eso es muy malo. Bueno, supongo que volveré a utilizar un montón de declaraciones NSLog :(No he tenido que usar el método de depuración "imprimir a pantalla" desde que escribí el código de ensamblaje hace más de diez años. Ok, yo Dejaremos de lloriquear ahora. ¡Gracias de nuevo! – BeachRunnerFred

+1

Aunque sea una buena diatriba (lo siento también) porque debería ser automática, es posible mejorar mucho las cosas. Lo correcto es [implementar 'description'] (http: //stackoverflow.com/a/11467498/2547229) como se muestra en otras respuestas. – Benjohn

2

Pase el ratón sobre una variable y una línea emergerá al respecto. Mueva el mouse ligeramente hacia la derecha, y desplace el cursor sobre la flecha del triángulo que está en el lado izquierdo de la ventana emergente, esa flecha se desplazará hacia abajo, y se abrirá otra ventana emergente que muestra todas las propiedades nombradas de ese objeto.

También puede hacer que imprima su valor de "descripción". Mueva su puntero ligeramente hacia la derecha hasta que esté sobre las dos pequeñas flechas "arriba/abajo". Luego, a la izquierda (bueno, "principal"), haga clic. Aparecerá una ventana emergente y una opción será "Imprimir descripción". Si hace clic en eso, pondrá el resultado de su método -description en la consola.

+0

gracias dan, pero como dije, cuando hago clic en la flecha en el lado izquierdo de la ventana emergente, siempre muestra "NSObject" como la única propiedad. – BeachRunnerFred

+0

Sí, bueno, ¿ves las pequeñas flechas que parecen "uppy downy" entre la flecha y el nombre del objeto? Haga clic en eso. Habrá una opción de "Imprimir descripción" allí. Ve si eso te dice algo. También puede usar "po" en la consola para imprimir la descripción de una variable, por supuesto ... –

+0

intenté eso, todo lo que imprime es "" – BeachRunnerFred

5

Para mis objetos de datos, tiendo a sobreescribir el método description y dar salida a una cadena con el resumen del objeto. Algo como esto:

Printing description of myContact: 
{name=Homer, lastname=Simpson, ...} 

Esto significa que se puede inspeccionar rápidamente un objeto en el depurador o cuando NSLog a la consola. Si esa descripción contiene todos los datos relevantes, también puede sobrescribir isEqual: para que use la descripción para comparar dos objetos.

+0

Esta es la verdadera respuesta – box86rowh

2

También puede cambiar la forma en que Xcode muestra un valor en el panel de variables locales yendo a "Editar formato de resumen" en el menú del botón derecho.

Por ejemplo, para conseguir que se llame al método description, se debe establecer a

{(NSString*)[$VAR description]}:s 

Pocos más detalles aquí: understanding Xcode debugger var display

1

Bueno, un par de años han pasado, y Xcode todavía muestra isa = (Clase) en la mayoría de los objetos en lugar de poder determinar cuál es el objeto.

Y aunque pasaron un par de años, Apple todavía está atrasado, porque la competencia está corriendo en bucles alrededor de ellos (y ahora están 16 años atrás del estado actual de competidores).

Cuestiones relacionadas