对象与协议中属性的保留类型冲突

时间:2014-07-22 09:27:30

标签: ios objective-c core-data memory-management

我有一个名为文件夹的核心数据NSManagedObject,其上有一个属性“帐户”。由于这是一个NSManagedObject,因此该属性为 strong

然后我得到了一个 FolderProtocol ,声明属性“帐户”也很强大。

然后我有另一个名为 FolderCombo 的对象,它符合 FolderProtocol 。问题是我需要在此 FolderCombo 上声明属性“帐户

帐户包含文件夹,以及 FolderCombos 文件夹没有保留周期,因为CoreData负责处理(关系使用ID而非实际对象),但使用 FolderCombos 除非我明确声明“< strong>帐户“属性

所以一切都很好但是我有一个警告,我无法摆脱。我可以/我应该压制这个警告吗?对此有适当的解决方法吗?

Warning: 'retain (or strong)' attribute on property 'account' does not match the property inherited from 'FolderProtocol'

2 个答案:

答案 0 :(得分:0)

嗯,我想出了一些解决这个问题的方法,但它确实有用。

我创建了一个名为weakAccount的弱私有属性。

 @property (nonatomic, weak) Account *weakAccount;

然后只创建了帐号@dynamic并覆盖了访问者以返回并设置了weakAccount。

 @dynamic account;

- (void)setAccount:(Account *)account
{
   self.weakAccount = account;
}


- (Account *)account
{
    return self.weakAccount;
}

这样头文件似乎符合协议,但内部引用很弱。

答案 1 :(得分:0)

从协议中删除属性,而不是那个,需要两个方法,一个getter和一个setter。请注意,协议方法可以通过属性(任何类型)实现,但您不再遇到strong vs weak的问题。