【问题标题】:@dynamic properties not supported in GDB?GDB 不支持@dynamic 属性?
【发布时间】: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,是的,我实现了 -methodSignatureForSelectorpo [myObject class] 打印正确的类名。我应该提一下,我在 gdb 中使用的实际对象是具有 @dynamic 属性的类的子类的实例。
  • 你在课堂上实现了 -respondsToSelector: 吗?也许 gdb 会检查并返回错误而不尝试。您也可以尝试在程序中的某个地方添加方法调用,看看它们是否有效,因为运行时将使用消息转发。

标签: objective-c xcode properties gdb dynamic-properties


【解决方案1】:

您可以使用po [myObject performSelector:@selector(name)] 作为解决方法,虽然它很尴尬。

【讨论】:

    猜你喜欢
    • 2021-07-15
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2019-09-12
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多