自定义委托和数据源的问题

时间:2012-12-20 08:15:57

标签: iphone objective-c ios delegates datasource

我有一个自定义委托和数据源。但是当我尝试初始化它时,我遇到了一些问题。在我的.h文件中,如果有这样的话。

@property (nonatomic, assign) id<UITableViewDelegate> delegate;
@property (nonatomic, assign) id<KalDataSource> dataSource;

这导致在.m文件中的合成中出现以下错误。

Existing ivar 'dataSource' for property 'dataSource' with assign attribute must be __unsafe_unretained.

经过一些谷歌搜索魔术后,我发现我应该像这样调整我的变量。

@property (nonatomic, strong) id<UITableViewDelegate> delegate;
@property (nonatomic, strong) id<KalDataSource> dataSource;

但后来我收到了这个错误。

linker command failed with exit code 1 (use -v to see invocation)

有人可以帮我吗?

亲切的问候!

2 个答案:

答案 0 :(得分:1)

您遇到的错误与您的记忆限定符无关(它们第一次就是正确的)。问题在于你已经在某个地方声明了支持iVar而没有限定符。当声明iVars时,它们是隐式强大的,所以如果你去影视iVars,并且在__weak__unsafe_unretained之前,警告应该消失。当然,更好的解决方案是完全删除你的支持iVars,因为Xcode会为你合成它们。

答案 1 :(得分:0)

代表通常是weak个引用。

使用委托的对象不拥有它。 它只是对可能或不能响应的对象的引用。 Weak说,如果对象的真正所有者释放它,它应该被释放。 然后弱引用自动设置为nil,你就不会得到任何僵尸。

其次,问题是,您已经拥有名为dataSource的属性。


修改

我之前关于重复属性的陈述结果证明是错误的。 你应该覆盖setter&amp; getter,.h中的声明和.m文件中的实现。