【问题标题】:How can I make the objective-c compiler assume undeclared properties are dynamic?如何让 Objective-C 编译器假定未声明的属性是动态的?
【发布时间】:2012-10-03 16:12:38
【问题描述】:

我希望能够写作

id foo = [MyObject new];
foo.bar = [NSObject new];

但我收到以下错误:

/blah/blah/blah/Blah.m:32:9: error: property 'bar' not found on object of type '__strong id'
foo.bar = [NSObject new];
    ^
1 error generated.

由于 clang 没有报告我可以压制的警告,我认为这种行为是永久性的,但我希望有人可以告诉我其他情况。

显然,我知道默认情况下这会中断,但我打算使用Dynamic Method Resolution 使其工作。

【问题讨论】:

  • 您在MyObject 标头中声明了bar 属性吗?
  • 没有。我希望能够使用动态方法解析来使其工作。

标签: objective-c properties compiler-errors compiler-warnings


【解决方案1】:

您不能像这样在通用对象指针上使用点语法。

原因是编译器将foo.bar = baz; 重写为[foo setBar:baz],但由于您可以更改setter 的名称@property (strong, nonatomic, setter=setListOfApples:) NSArray * listOfOranges;,它必须能够看到属性声明。 p>

如果您使用标准的消息发送语法,这将起作用。换句话说,您必须告诉编译器对象的确切类型以便它可以查找属性的 setter,或者告诉它您希望它使用的确切 setter 名称。

【讨论】:

  • 谢谢!这一切都说得通。
【解决方案2】:

@dynamic 会处理它吗?

@动态富; @动态条;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多