2011-10-24 42 views
2

我回顾我的一些代码,我突然意识到,这有UITableView,是这个UITableViewdatasourcedelegate没有声明的协议<UITableViewDataSource, UITableViewDelegate>,而只是有方法,但从来没有一个UIViewController宣布的协议。UIViewController作为数据源和UITableView的委托而不遵守协议?

这是如何工作的,甚至每?文档:

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继承这个协议,这只是一个UIViewController子类。

编辑:显然IB不会给你任何警告,如果它设置在那里,它尽可能按代码执行。我相信IB也应该给你警告,但我想不是。

回答

2

愚弄的人只要您实现所要求的的UITableViewDelegate和UITableViewDataSource标记方法(如无有关的UITableViewDelegate和两个用于UITableViewDataSource )那么你很好。 tableView将检查可选方法的respondsToSelector。你在界面构建器中做你的连接吗?如果你在代码中这样做,应该有一点警告,说你的类不符合UITableViewDataSource和UITableViewDelegate,但是如果你的对象在运行时响应了所需的消息,那么在一天结束时它就会工作。

+0

它试图从代码尝试时发出预期的警告,但是从IB完成时没有,我认为它也应该在IB中显示警告,但我猜不是。 –

+0

@OscarGomez我同意,它应该在IB中显示警告。 – jbat100

1

发生了什么事是表视图正在发送数据源和委托消息到指定的对象,希望指定的对象符合(未声明的)协议。如果你没有实现“required”方法等等),那么UITableViewDelegate添加到你的接口中.h文件为你提供了类型检查和一致性(即警告)。

对于我刚刚总结的内容,可能有更多官方描述。

顺便说一句,你的问题是这样一个

UITableView without <UITableViewDelegate, UITableViewDataSource> still works!

+0

谢谢你的信息和链接,但我的不给任何警告,这是非常奇怪的。 –