0

我有一个 UITableViewController 显示默认的单元格。可以触摸每个单元格并将其带到第一个视图中每个单元格所拥有的“帐户”内的列表中。

我用一个 segue 连接了所有东西,然后在我的第一个视图中我调用:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        Account *nextAccount = [self.list objectAtIndex:indexPath.row];
        DetailViewController *viewController = (DetailViewController *)[segue destinationViewController];
        viewController.account = nextAccount;
    } 
}

然后在详细视图的 viewDidAppear:(BOOL)animated 我说:

 - (void)viewDidAppear:(BOOL)animated {
self.list = [self.account.list mutableCopy];
}

然后我在详细视图上有一个 UITableViewController 但在 cellForRowAtIndexPath: 方法中我访问了 self.list 但它似乎不起作用。我知道我的 cellForRowAtIndexPath: 有效,因为之前我使用该方法做了一些模板工作并且效果很好。似乎只是 prepareForSegue: 不起作用或未设置属性。

提前致谢!

4

2 回答 2

0

使用 NSLog 并检查每个元素是否 != nil。(nextAccount 等)Objective C 很乐意让您向 nil 对象发送消息而不会抛出错误消息。

还要在你的 segue 条件语句中添加一个日志语句,以确保它被调用。

于 2012-06-28T19:21:24.807 回答
0

它可能在调用 viewDidAppear 之前很久就尝试设置详细信息表视图。而是尝试覆盖数据模型的设置器:

-(void)setList:(List*)list    // or whatever type list is
{
    if (_list != list) {
        _list = [list mutableCopy];
    }
}

然后它应该在加载视图之前创建副本。

此外,如果您要覆盖 viewDidAppear,请务必调用 super:

[super viewDidAppear];
于 2012-06-28T20:05:36.530 回答