gdb:在NSManagedObject子类上调用访问器方法?

时间:2011-04-24 17:30:53

标签: objective-c ios gdb

我有一个类,Song,它是NSManagedObject的子类。我正在使用GDB来尝试找出我遇到的问题,并且很难使用gdb在我的类上调用访问器。

Song.h:

@property (nonatomic, retain) NSString * title;

Song.m:

@dynamic title;

在调试器中,我看到对象上的“title”字段,当我尝试使用访问器打印值时,如果我理解正确,它应该在运行时生成,它会给我一个错误:

 (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.

我有可能在这里做一些非常愚蠢的事情,但我做错了什么?是否有任何方法可以内省对象并查看它将使用GDB响应哪些消息?

2 个答案:

答案 0 :(得分:26)

您可以使用gdb方法在valueForKey:中访问动态生成的属性,如[aSong valueForKey:@"title"]中所示。 (如果你是一个受虐狂,这种技术也适用于合成属性,但实际上它只在检查NSManagedObject及其子类时才派上用场。)

答案 1 :(得分:3)

可悲的是,这就是gdb行为的方式。而不是询问对象是否会响应选择器,它似乎只是在编译时现在 来查看对象的实现(我还没有找到然而)。由于在消息转发过程中处理了核心数据属性,因此调试器不相信NSManagedObject将响应属性选择器。

这可能值得向Apple报告错误,因此他们可以修复调试器。

相关问题