UIViewController作为UITableView的数据源和委托,不符合协议?

时间:2011-10-24 14:54:41

标签: iphone uiviewcontroller uitableview

我正在审核我的一些代码,突然间我意识到一个UIViewController有UITableView并且是datasource的{​​{1}}和delegate并未声明协议UITableView,但只是简单地拥有方法但从未声明协议。

根据文档,这是如何工作的?

<UITableViewDataSource, UITableViewDelegate>

没有任何类型的警告,我当然有必要的方法来完成这项工作,一切运作完美,为什么这样做?我不是继承dataSource The object that acts as the data source of the receiving table view. @property(nonatomic, assign) id<UITableViewDataSource> dataSource Discussion The data source must adopt the UITableViewDataSource protocol. The data source is not retained. delegate The object that acts as the delegate of the receiving table view. @property(nonatomic, assign) id<UITableViewDelegate> delegate Discussion The delegate must adopt the UITableViewDelegate protocol. The delegate is not retained. 我知道这个协议,这只是一个UITableViewController子类。

编辑:显然IB如果在那里设置了它就不会给你任何警告,但它在代码上按预期执行。我相信IB也应该给你警告,但我猜不是。

2 个答案:

答案 0 :(得分:2)

只要实现UITableViewDelegate和UITableViewDataSource所标记的方法(UITableViewDelegate为无,UITableViewDataSource为2),那么你就可以了。 tableView将使用respondsToSelector检查可选方法。您是否在界面构建器中进行连接?如果你在代码中执行它应该有一点警告说你的类不符合UITableViewDataSource和UITableViewDelegate,但是如果你的对象在运行时响应所需的消息,它会在一天结束时工作。

答案 1 :(得分:1)

正在发生的事情是表视图正在向指定的对象发送数据源和委托消息,希望指定的对象符合(未声明的)协议。

添加UITableViewDataSource&amp; UITableViewDelegate到您的接口.h文件为您提供类型检查和一致性(即如果您没有实现“必需”方法的警告等)。

对于我刚才总结的内容,可能有更多官方说明。

b.t.w。,你的问题是这个问题的骗局

UITableView without <UITableViewDelegate, UITableViewDataSource> still works!