我有一个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:没有工作或财产没有设置。
提前致谢!
答案 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];