【发布时间】:2011-07-03 20:56:51
【问题描述】:
我将@dynamic 属性与-forwardInvocation: 结合使用以在运行时生成属性(如this answer 中所述)。现在,当我尝试在 GDB 中使用这样的属性(假设 name 是这样一个动态属性)时,我总是得到这个:
(gdb) call (void) [myObject setName:@"foo"]
Target does not respond to this message selector.
(gdb) po [myObject name]
Target does not respond to this message selector.
GDB 中是否有一个开关可以使这项工作发挥作用?
【问题讨论】:
-
您如何使用 forwardInvocation:在这种情况下,与您的实际属性 getter 和 setter 相关?
-
@Ryan,就像在链接的答案中一样,我也使用字典作为数据存储。
-
gdb 在其命令行界面实现中可能没有为这种情况做好准备。您是否还实现了 -methodSignatureForSelector: 在您的对象上?另外,退后一步,如果您的 myObject 变量未指向您的类的有效实例,我希望您从 gdb 获得此消息。当您运行此命令时,gdb 是否会打印您期望的类名:“po [myObject class]”?
-
@Ryan,是的,我实现了
-methodSignatureForSelector和po [myObject class]打印正确的类名。我应该提一下,我在 gdb 中使用的实际对象是具有 @dynamic 属性的类的子类的实例。 -
你在课堂上实现了 -respondsToSelector: 吗?也许 gdb 会检查并返回错误而不尝试。您也可以尝试在程序中的某个地方添加方法调用,看看它们是否有效,因为运行时将使用消息转发。
标签: objective-c xcode properties gdb dynamic-properties