【问题标题】:Property type 'id' is incompatible with type 'id' inherited from 'UIToolbar' warning属性类型“id”与继承自“UIToolbar”警告的类型“id”不兼容
【发布时间】:2013-10-10 00:06:03
【问题描述】:

我刚刚安装了 xcode 5,现在我收到了这个警告。我以前从未见过它。我的应用程序运行良好,但我讨厌看到警告。有谁知道这是什么以及如何解决它? 谢谢

属性类型“id”与继承自“UIToolbar”的类型“id”不兼容

【问题讨论】:

标签: ios


【解决方案1】:

很难从缺乏上下文中分辨出来,但这似乎与Syntax for resolving incompatible property type on inherited delegate重复

问题可能是您正在创建一个名称相同但附加了不同协议的新属性。

例如,UIToolBar 具有以下属性:

@property(nonatomic, assign) id<UIToolbarDelegate> delegate;

如果您要在类中声明以下内容,则会生成此警告,因为这两个属性具有不同的协议:

@property(nonatomic, assign) id<MyBetterDelegate> delegate;

有两种方法可以解决这个问题。您可以修改您的协议以从其他协议继承:

@protocol MyBetterDelegate<UIToolbarDelegate>
...

或者您可以修改您的属性定义以捕获这两种协议:

@property(nonatomic, assign) id<MyBetterDelegate, UIToolbarDelegate> delegate;

【讨论】:

  • 这成功了。谢谢!有两种方法可以解决这个问题。您可以修改您的协议以从其他协议继承:
【解决方案2】:

是的,这是因为您可能在名为 delegate 的类中声明了一个 id 属性,而 UIToolbar 有一个同名的属性 id。只需将类的名称更改为 myClassDelegate 之类的名称,它就会清除警告。

Syntax for resolving incompatible property type on inherited delegate

【讨论】:

    【解决方案3】:

    您不应在对象中使用“id”作为属性 - 它是为客观 C 对象保留的。

    将其更改为“toolbarId”之类的东西 - 就可以了。

    【讨论】:

    • 有 - 你做错了 :) 特别是如果你的“id”类型与应有的不同。
    • 哎呀,你是对的。我读得很快,但我没有理解这个问题,但毫无疑问你是对的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多