0

我正在学习如何在 ios 中编写应用程序。任何人都知道最近的一个教程,该教程展示了如何在堆栈顶部推送一个表视图控制器对象的新实例,而无需创建和连接新的 nib?

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

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

实现 didSelectRowAtIndexPath 的教程代码:

//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];

}

}
4

2 回答 2

0

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

rvController.tableDataSource = Children;
[self.navigationController pushViewController:rvController animated:YES];

其他可能有帮助的东西:在 Xcode 中添加一个异常断点并将其设置为捕获所有抛出异常(我相信这是默认设置)。如果它因为你写的东西而崩溃,应用程序将在实际的行构成问题上中断,这可能有助于你理解问题。

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

于 2013-07-18T15:54:58.520 回答
0

我必须在应用程序委托中实例化一个导航控制器对象。除非有导航控制器在运行,否则 Self.navigationController 不起作用。此后,我通过使用 UIStoryboard 类更新了代码以使用故事板。

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

于 2013-07-31T19:57:21.160 回答