实现自定义的UITableViewController类,并避免委托警告

问题描述:

我试图使自己的UITableViewController版本的UIViewController(更多定制)。所以在我的超类中,我实现了委托和数据源,并将UITableView对象委托和数据源属性设置为“this”。唯一的问题是我得到一个编译器警告,抱怨我没有实现强制的dataSource和委托方法。我希望能够实现这些方法时,我的自定义UITableViewController实现自定义的UITableViewController类,并避免委托警告

有一个整洁的方式,使这些警告消失,或者是我把强制性的委托方法都是空的,然后在子类中重写他们的唯一途径?这是不好的做法吗?任何人都有关于苹果如何完成这个UITableViewController类的任何见解?

+0

你能告诉更多的是什么,你的意思是“更多的定制”做一点?也许有办法做你想做什么比制作你自己版本的“UITableViewController” – 2012-02-02 21:36:08

+0

好吧,一件大事就是我希望它从设置所有我的应用程序视图控制器的UIViewController类中获益。 – 2012-02-02 21:40:10

+0

您可以设置在一个没有问题的一个UIViewController一个UITableView,你并不需要一个UITableViewController – 2012-02-02 21:43:24

我使用这种模式为“抽象”的方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    [self doesNotRecognizeSelector:_cmd]; 
    abort(); 
} 

_cmd的变量是当前方法的选择器。它会自动提供,就像self一样。

您必须致电abort(),因为编译器知道abort()未返回,但它不知道有关doesNotRecognizeSelector:

至少在iOS 5中,UITableViewController方法不是空的,因为UITableViewController支持从故事板加载预定义(静态)行。

+0

谢谢。只是好奇,但实现你的抽象模式,这与什么目的,而只是把方法留空?如果它是用户可以调用的方法,我会理解它,但委托方法只能由系统/委托调用。或者也许我错过了一些东西,如果你能解释,会很感激。 – 2012-02-02 21:50:40

+0

好吧,我想我明白了为什么你这么做了,以防止它为退货价值发出警告。如果该方法没有返回值,那么你会留下空白还是做了其他的事情呢? – 2012-02-02 22:45:53

+0

重写'doesNotRecognizeSelector:'有可能(尽管很少)返回,所以我总是使用'abort()'。 – 2012-02-02 23:02:21