prepareForSegue被调用两次,在演示过程中尝试呈现<UINavigationController>

我是新来的ios编程,并要求在这里,但我一直访问! 我很困惑,为什么我得到这个问题,编译没有错误,我已经检查和检查我的MainStoryboard中的所有网点和标识符。

我有2 UITableViewControllers,我传递一个string从第一个到第二个当用户在表中select一个项目,所以在FirstTableViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { int sel = indexPath.row; if (sel == 0) { _keyName = [NSString stringWithString:_string1]; NSLog(@"the table was selected at cell 0, %@", _string1); } if (sel == 1) { _keyName = [NSString stringWithString:_string2]; } // more code below... } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"ResultsSegue"]) { UINavigationController *navigationController = segue.destinationViewController; ResultsViewController *rv = [[navigationController viewControllers] objectAtIndex:0]; [rv setResults: _keyName]; NSLog(@"in the progress view, %@", _keyName); //rv.delegate = (id)self; rv.delegate = self; } } 

并在我的ResultsViewController.m

 - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"in the results, %@", _results); NSLog(@"in the results view"); } 

在NSlog读取中,我得到:…在进度视图中,(null)在结果中,(null)在进度视图中,正确的string警告:尝试呈现

然后,当我点击取消button返回到第一个桌面,再次按详细信息视图不再显示空白..

在进度视图中,结果中的右侧string,进度视图中的右侧string,右侧string

问题是prepareForSegue在didSelectRowAtIndexPath之前被调用。 你应该消除didSelectRowAtIndexPath方法,并在prepareForSegue中做所有事情。 您可以使用以下行来获取您需要的indexPath:

 NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 

Rob的回答也帮助了我 – 谢谢! 我在Swift中编写代码,所以对于那些在Swift中遇到这个问题的人来说,在Swift 3中如何获得索引(或索引行)

 var rowClicked = (self.tableView.indexPathForSelectedRow?.row)!