我正在尝试在UITableViewController
中制作我自己的UIViewController
版本(以获得更多自定义)。所以在我的超类中,我实现了委托和数据源,并将UITableView
对象委托和数据源属性设置为“this”。唯一的问题是我得到编译器警告抱怨我没有实现强制dataSource和委托方法。当我继承自定义UITableViewController
时,我希望能够实现这些方法。
是否有一种简洁的方法可以使这些警告消失,或者是我唯一的方法来放置强制委托方法的空版本,然后在子类中覆盖它们?这是不好的做法吗?任何人都可以通过UITableViewController
课程了解Apple如何实现这一目标?
答案 0 :(得分:3)
我将此模式用于“抽象”方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
[self doesNotRecognizeSelector:_cmd];
abort();
}
_cmd
变量是当前方法的选择器。它会自动提供,就像self
一样。
你必须调用abort()
,因为编译器知道abort()
没有返回,但它不知道doesNotRecognizeSelector:
。
至少在iOS 5中,UITableViewController
方法不为空,因为UITableViewController
支持从故事板中加载预定义(静态)行。