2011-04-24 54 views
8

我有一个类,宋,它的子类NSManagedObject。我正在使用GDB试图找出我遇到的问题,并且很难用gdb调用我的类的访问器。gdb:在NSManagedObject子类上调用访问器方法?

Song.h:

@property (nonatomic, retain) NSString * title; 

Song.m:

@dynamic 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响应什么消息?

+0

你试过'p a Song-> title'吗? – 2011-05-11 06:28:49

回答

3

可悲的是,这是多么gdb的行为。而不是询问的对象是否会来选择回应,这似乎只是看对象的实现要么现在在编译时(我还没有制定出哪些还没有)。由于Core Data属性在消息转发过程中处理,调试器不相信NSManagedObject将响应属性选择器。

这可能是值得的苹果一个bug报告,这样他们就可以修正调试。

+0

谢谢,我用NSLog语句证实了这一点(我可能应该先开始)。 – 2011-04-24 18:43:55

26

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

+3

这一个应该检查为正确的! – jessecurry 2011-08-18 23:01:19