4

因此,我试图将 tableView 组件连接到通过 .xib 用户界面创建的 UIViewController。我得到了经典-[UIView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x1f544cb0,我猜我连接的东西不正确,或者正在做一些我不应该用界面构建器做的事情。我搜索了谷歌和堆栈溢出,发现了类似的问题,但没有对我的情况有所帮助的答案。我一直在努力解决这个问题,希望这里有人能提供帮助。当控制器是 UITableViewController 时,我只通过情节提要或使用 .xib 完成此操作。通常我只会使用 UITableViewController 但我可能需要在视图底部添加一个工具栏,以便该选项不可行。这是我创建课程所采取的步骤,如果我做错了什么,请告诉我

我首先使用 XIB 为用户界面创建文件: 在此处输入图像描述

然后我将表格视图组件添加到 XIB: 在此处输入图像描述

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

@interface LeftMenuViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

然后,我通过控制从组件拖动到 File's Owner 标题并选择委托和数据源,将表格视图组件连接到委托和数据源,如图所示:

在此处输入图像描述

然后,我将以下代码行添加到 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错误。我究竟做错了什么?我尝试过或推荐过的一切都没有奏效。

4

3 回答 3

2

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

你应该用类似的东西实例化它:

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

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

SecondViewController *controller = [[SecondViewController alloc] initWithNibName:@"MyNibName" bundle:nil];
[self presentViewController:controller animated:YES completion:nil];
于 2013-08-15T15:03:35.937 回答
1

在占位符部分的 NIB 文件中单击 File's Owner,并确保自定义类设置为LeftMenuViewController或您命名的任何内容。

于 2013-08-15T15:00:36.313 回答
0

在 viewDidLoad 中:

self.tableView.delegate = self;
于 2013-08-15T14:50:44.093 回答