2011-04-24 8 views
8

Tengo una clase, Song, que subclase NSManagedObject. Estoy usando GDB para tratar de resolver un problema que estoy teniendo, y estoy teniendo dificultades para llamar a un accesorio en mi clase usando gdb.gdb: métodos de acceso de llamada en la subclase NSManagedObject?

Song.h:

@property (nonatomic, retain) NSString * title; 

Song.m:

@dynamic title; 

En el depurador, veo el campo "Título" en el objeto, cuando trato de imprimir el valor con las de acceso, que debe ser generado en tiempo de ejecución si he entendido bien, me da un error:

(gdb) po aSong <Song: 0x59188d0> 
(entity: Song; id: 0x59162d0 
<x-coredata://99BE63F8-840A-47B5-A259-BCD74E1811C4/Song/p2> 
; data: { 
    composers = "<relationship fault: 0x4d62f30 'composers'>"; 
    dateCreated = nil; 
    songLists = "<relationship fault: 0x59243c0 'songLists'>"; 
    title = "cancel?"; }) 
(gdb) p aSong.title There is no member named 
title. 
(gdb) p [aSong title] 
Target does not respond to this message selector. 

lo más probable es que soy haciendo algo realmente estúpido aquí, pero ¿qué estoy haciendo mal? ¿Hay alguna forma de introspectir un objeto y ver a qué mensajes responderá usando GDB?

+0

¿Ha probado 'p aSong-> title'? –

Respuesta

3

Lamentablemente, así es como se comporta gdb. En lugar de preguntarle al objeto si responderá a un selector, parece simplemente mirar la implementación del objeto ya sea ahora o en tiempo de compilación (aún no he resuelto cuál). Debido a que los atributos de Core Data se tratan durante el proceso de reenvío de mensajes, el depurador no cree que NSManagedObject responderá a los selectores de atributo.

Probablemente valga la pena informar a Apple de este error, para que puedan arreglar el depurador.

+0

gracias, confirmé esto con una declaración NSLog (que probablemente debería haber hecho para empezar). –

26

Puede acceder a las propiedades generadas dinámicamente en gdb utilizando el método valueForKey:, como en [aSong valueForKey:@"title"]. (Esta técnica también funciona para las propiedades sintetizadas, si es masoquista, pero realmente solo es útil al inspeccionar NSManagedObject y sus subclases).

+3

¡Éste debe verificarse como correcto! – jessecurry

Cuestiones relacionadas