问题将tableView连接到.XIB中的数据源

时间:2013-08-15 14:46:54

标签: ios xcode uitableview xib

所以我试图将tableView组件连接到通过.xib用户界面创建的UIViewController。我得到了经典的-[UIView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x1f544cb0,并且我猜测我已经错误地连接了某些内容,或者正在做一些我不应该使用界面构建器做的事情。我搜索了谷歌和堆栈溢出,并找到了类似的问题,但没有答案,这有助于我的情况。我一直试图弄明白这一点,并希望这里有人可以提供帮助。当控制器是UITableViewController时,我只通过storyboard或.xib完成了这个。通常我会使用UITableViewController,但我可能需要在视图底部添加一个工具栏,以便该选项不可行。以下是我创建课程的步骤,如果我做错了,请告诉我

我首先使用XIB为用户界面创建文件: enter image description here

然后我将表视图组件添加到XIB: enter image description here

在LeftMenuViewController.h中,我添加了以下代码行,以告知允许将该类用作UITableViewDelegate和UITableViewDataSource:

@interface LeftMenuViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

然后,我将表视图组件连接到委托和数据源,方法是从组件拖动到File的Owner标题,并选择委托和数据源,如下所示:

enter image description here

然后我将以下代码行添加到LeftMenuViewController.m,以提供所需TableView委托方法的定义:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 5;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 48;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell;
    return cell;
}

此过程导致应用程序抛出NSInvalidArgumentException,从而产生[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector错误。我究竟做错了什么?我尝试或推荐过的所有东西都没有用。

3 个答案:

答案 0 :(得分:2)

错误在您的错误消息UIViewController中引用[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector,这意味着文件所有者尚未设置(它应该引用您的视图控制器子类,而不是{{1 },本身)。您已在NIB中正确指定了委托和数据源,因此我想知道您是如何实例化视图控制器的。

您应该使用以下内容对其进行实例化:

UIViewController

或者,如果NIB名称与控制器名称不匹配:

SecondViewController *controller = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
[self presentViewController:controller animated:YES completion:nil];

答案 1 :(得分:1)

在占位符部分的NIB文件中单击文件所有者,并确保将自定义类设置为LeftMenuViewController或您为其命名的任何内容。

答案 2 :(得分:0)

在viewDidLoad中:

self.tableView.delegate = self;