Objective c 使用相同的nib文件时,将表视图控制器对象的新实例推送到堆栈顶部
我正在学习如何在ios中编写应用程序。有没有人知道最近的一个教程,它展示了如何在不需要创建和连接新的nib的情况下将表视图控制器对象的新实例推送到堆栈顶部 我在2009年3月的iphone SDK文章中找到了一篇旧教程。该网站不再存在,因为其域已过期。但是,本文在xcode中使用了一个预打包的2009“基于导航的应用程序”,展示了如何使用相同的视图控制器而不是合并一个新的nib文件来深入查看表。在本文中,视图控制器被标识为“rootview”控制器 我已经成功地修改了代码,使用带有UITableViewDelegate和UITableViewDataSource的UIViewController类将数据从plist填充到表格单元格。这并不难做到。但是,当使用DidSelectRowatineXpath方法激活单元格时,我的问题就开始了。本教程的代码创建同一个表视图控制器类的新实例,更新单元格数据并将其推到堆栈顶部以实现“向下钻取”。当我将相同的方法应用于控制器类时,xcode抛出一个错误。诚然,我的无知可能是问题的原因。这就是我寻求帮助的原因 实现DidSelectRowatineXpath的教程代码:Objective c 使用相同的nib文件时,将表视图控制器对象的新实例推送到堆栈顶部,objective-c,view,uitableview,Objective C,View,Uitableview,我正在学习如何在ios中编写应用程序。有没有人知道最近的一个教程,它展示了如何在不需要创建和连接新的nib的情况下将表视图控制器对象的新实例推送到堆栈顶部 我在2009年3月的iphone SDK文章中找到了一篇旧教程。该网站不再存在,因为其域已过期。但是,本文在xcode中使用了一个预打包的2009“基于导航的应用程序”,展示了如何使用相同的视图控制器而不是合并一个新的nib文件来深入查看表。在本文中,视图控制器被标识为“rootview”控制器 我已经成功地修改了代码,使用带有UITable
//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,但我可以实现相同的结果。