Objective c 使用相同的nib文件时,将表视图控制器对象的新实例推送到堆栈顶部

Objective c 使用相同的nib文件时,将表视图控制器对象的新实例推送到堆栈顶部,objective-c,view,uitableview,Objective C,View,Uitableview,我正在学习如何在ios中编写应用程序。有没有人知道最近的一个教程,它展示了如何在不需要创建和连接新的nib的情况下将表视图控制器对象的新实例推送到堆栈顶部 我在2009年3月的iphone SDK文章中找到了一篇旧教程。该网站不再存在,因为其域已过期。但是,本文在xcode中使用了一个预打包的2009“基于导航的应用程序”,展示了如何使用相同的视图控制器而不是合并一个新的nib文件来深入查看表。在本文中,视图控制器被标识为“rootview”控制器 我已经成功地修改了代码,使用带有UITable

我正在学习如何在ios中编写应用程序。有没有人知道最近的一个教程,它展示了如何在不需要创建和连接新的nib的情况下将表视图控制器对象的新实例推送到堆栈顶部

我在2009年3月的iphone SDK文章中找到了一篇旧教程。该网站不再存在,因为其域已过期。但是,本文在xcode中使用了一个预打包的2009“基于导航的应用程序”,展示了如何使用相同的视图控制器而不是合并一个新的nib文件来深入查看表。在本文中,视图控制器被标识为“rootview”控制器

我已经成功地修改了代码,使用带有UITableViewDelegate和UITableViewDataSource的UIViewController类将数据从plist填充到表格单元格。这并不难做到。但是,当使用DidSelectRowatineXpath方法激活单元格时,我的问题就开始了。本教程的代码创建同一个表视图控制器类的新实例,更新单元格数据并将其推到堆栈顶部以实现“向下钻取”。当我将相同的方法应用于控制器类时,xcode抛出一个错误。诚然,我的无知可能是问题的原因。这就是我寻求帮助的原因

实现DidSelectRowatineXpath的教程代码:

//RootViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

//Get the dictionary of the selected data source.
NSDictionary *dictionary = [self.tableDataSource objectAtIndex:indexPath.row];

//Get the children of the present item.
NSArray *Children = [dictionary objectForKey:@"Children"];


if([Children count] == 0) {

    DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];

    [self.navigationController pushViewController:dvController animated:YES];

    [dvController release];

} else {

    //Prepare to tableview.

    RootViewController *rvController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:[NSBundle mainBundle]];

    //Increment the Current View
    rvController.CurrentLevel += 1;

    //Set the title;
    rvController.CurrentTitle = [dictionary objectForKey:@"Title"];

    //Push the new table view on the stack
    [self.navigationController pushViewController:rvController animated:YES];

    rvController.tableDataSource = Children;

    [rvController release];

}

}

很难确定,因为您没有发布实际的错误消息。 可能存在的一个问题是,在将新控制器推送到堆栈后,将子控制器传递给新控制器。因此,可能已经调用了ViewController的某些视图生命周期方法,如果在设置之前尝试对子对象执行某些操作,则可能会导致应用程序崩溃。 将其更改为:

rvController.tableDataSource = Children;
[self.navigationController pushViewController:rvController animated:YES];
其他一些可能有用的东西:在Xcode中添加一个异常断点,并将其设置为在抛出时捕获所有异常(我相信这是默认设置)。 如果它因为您编写的某些内容而崩溃,应用程序将在实际线路上中断,从而引发问题,这可能有助于您理解问题


如前所述,如果这没有帮助,请务必发布实际的错误消息

我必须在app委托中实例化一个导航控制器对象。Self.navigationController不工作,除非有导航控制器在使用中。此后,我利用UIStoryboard类更新了代码,使之能够与故事板一起工作


我感觉我在慢慢地用每一小步攀登珠穆朗玛峰。对于一个新的程序员(我以律师为生)来说,这很痛苦,但不知何故,我似乎正在向前迈进

发布实际错误消息。感谢您提供的故障排除提示。我阅读了有关self.navigationcontroller的更多信息,并意识到我没有在app委托文件中实例化导航控制器。因此,没有合适的控制器将新的tableview实例推送到堆栈顶部。嗯。。。我最近更新了代码来处理故事板,虽然我不得不使用nibName转储init并使用一个提供类似方法的新类UIStoryboard,但我可以实现相同的结果。