1

我有一个带有按钮的视图控制器。当用户单击按钮时,我希望将用户导航到表视图控制器(即显示表视图)。

单击按钮时,我让它调用以下方法:

- (void)loadTableViewController{

    TableViewViewController *tableViewController = [[TableViewController alloc]     initWithNibName:nil bundle:NULL];
    [self.navigationController pushViewController:tableViewController animated:YES];

}

上面的代码似乎很好,因为在最后一行之后的调试模式下,我被带到了 TableView Controller 的实现文件中。这就是事情发生故障的地方......我声明tableViewtableViewController

下面是 viewDidLoad 方法的代码:

[super viewDidLoad];
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
[self.view addSubview:self.tableView];

程序在调试模式的最后一行之后发生故障。完全不确定出了什么问题......我所做的唯一其他更改是为表格返回 1 节和 1 行。这是该代码:

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.textLabel.text = @"Test";
    return cell;
}

编辑:添加错误详细信息。

我得到的错误看起来像一个通用的“libc++abi.dylib:以 NSException (lldb) 类型的未捕获异常终止”

请记住,我对 Xcode 和一般编程非常陌生。所以我可能没有在正确的地方寻找特定的错误。

4

2 回答 2

1

您没有使用UITableViewController's初始化方法。相反,使用

TableViewViewController *tableViewController = [[TableViewController alloc] initWithStyle:UITableViewStylePlain];
[self.navigationController pushViewController:tableViewController animated:YES];

在那之后,在你的类中初始化你的表视图UITableViewController是没有意义的,因为UITableViewController它已经为你做了(这就是使用它的目的),而是tableView使用self.tableView.

另请注意,- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier仅适用于 iOS 6.0 及更高版本(将在其下方崩溃)

对于填充单元格,只需使用:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CellIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    }


    cell.textLabel.text = [NSString stringWithFormat:@"row %d", indexPath.row + 1];
    return cell;
}
于 2013-11-12T21:28:05.427 回答
0

我的猜测是问题是由这一行引起的:

TableViewViewController *tableViewController = [[TableViewController alloc]     initWithNibName:nil bundle:NULL];

您缺少实际的笔尖名称。将 nil 替换为您的 nib 名称。

于 2013-11-12T21:27:05.077 回答