繁体   English   中英

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

[英]issue with custom delegate and 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)

有人可以帮我吗?

亲切的问候!

您遇到的错误与您的内存限定符无关(它们是第一次出现的)。 问题在于您已经在没有限定符的地方声明了支持iVar。 声明iVar时,它们隐含强度,因此,如果您进入阴影iVars,并在__weak__unsafe_unretained加上,警告应消失。 当然,更好的解决方案是完全删除支持的iVar,因为Xcode会为您合成它们。

代表通常是weak引用。

使用委托的对象不拥有它。 它只是对可能响应或无法响应的对象的引用。 弱说,如果对象的真正所有者释放它,则应将其释放。 然后,弱引用会自动设置为nil ,您不会遇到任何僵尸。

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


编辑

我先前关于重复属性的陈述是错误的。 您应该覆盖setter和getter, .h的声明和.m文件中的实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM