prepareForSegue和设置属性设置

时间:2012-06-28 19:01:38

标签: uitableview ios5 properties storyboard segue

我有一个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)动画我说:

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

然后我在详细信息视图上有一个UITableViewController但在cellForRowAtIndexPath:方法中我访问self.list但它似乎没有工作。我知道我的cellForRowAtIndexPath:有效,因为我之前使用该方法做了一些模板工作,并且工作正常。它似乎只是prepareForSegue:没有工作或财产没有设置。

提前致谢!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

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

[super viewDidAppear];