我对UITableViewController有点困惑......据我所知,它们通常是UITableView的委托和数据源(虽然可以使它们不同)。
但是在某些情况下,比如在Interface Builder中的UITabBarViewController中嵌入UITableViewController时,我们会在IB中启动表视图控制器。因此,根据我的理解,正在调用默认初始化程序。
但在这种情况下,我有这段代码:
@interface Settings : UITableViewController {
}
在IB中,我看到UITableView的委托和数据源已连接到此类。我的问题是,为什么我们不需要明确地说它遵循:
@interface Settings : UITableViewController <UITableViewDelegate, UITableViewDataSource>
{
}
在.m文件中:
- (void)viewDidLoad {
[super viewDidLoad];
[tableView setDelegate:self];
[tableView setDataSource:self];
}
我确实偶然发现了一些情况,我必须明确地对上面几次进行编码才能使某些东西发挥作用。虽然对我来说仍然是一个谜,但为什么需要......
答案 0 :(得分:3)
在超类后面的尖括号中,您可以定义您的类将要实现的协议。协议包含(如Java中的接口)方法声明,但没有实现。一些方法被标记为必需,一些方法是可选的。即如果你决定实施一个协议,至少你必须实现所需的协议。
但是,您无需表明您将实施协议。它足以实现所需的,您的代表将工作正常。不过,这是一个好主意。 Xcode和编译器会警告你,如果两者都检测到你的实现中的错误(比如忘记了一个必需的方法,使用了错误的方法签名等)。
答案 1 :(得分:-5)
使用
tableView.delegate =自我; tableView.dataSource =自我;
而不是
[tableView setDelegate:self];
[tableView setDataSource:self];