【问题标题】:retain (or strong) attribute does not match the property inherited from nswindowcontroller保留(或强)属性与从 nswindowcontroller 继承的属性不匹配
【发布时间】:2014-12-02 15:15:43
【问题描述】:

当我将我的应用程序(非 ARC)与 10.10 OS X 兼容时,我收到了该属性的警告

@property (nonatomic, retain) MasterDocument *document;

其中MasterDocument 的类型为NSDocument

我收到警告

属性“文档”上的保留(或强)属性与从 NSWindowController 继承的属性不匹配。

还会收到对同一属性的另一个警告,例如:

属性“document”上的“atomic”属性与继承自 NSWindowController 的属性不匹配。**

谁能建议我收到此警告的原因以及如何清除此警告。

【问题讨论】:

    标签: objective-c xcode6 osx-yosemite


    【解决方案1】:

    您已创建 NSWindowController 的子类,并且您正在添加父类中已存在的属性。

    您收到此警告是因为您正在更改现有属性的定义,尤其是您正在将内存管理从分配更改为保留。

    第二个警告是因为您将访问权限从 atomic 更改为 nonatomic

    原始属性(根据文档)是:

    @property(assign) id document
    

    您可以省略重新声明属性并使用现有的属性,或者至少使用相同的设置,例如:

    @property (assign) MasterDocument *document;
    

    当然请注意,您将使用 assign 而不是 retainstrong,因此请确保正确处理内存。

    【讨论】:

    • 'document' 是我的自定义对象,所以我需要使用它并且我没有使用从 NSWindowController 继承的属性。我可以这样做吗?保留“文档”以外的属性。希望这会清除它。你说什么?
    • 是的,您可以通过使用不同的属性名称来避免冲突,可能是这样的:@property (nonatomic, strong) MasterDocument *masterDocument;
    • 感谢您的建议,您的回答解决并清除警告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多