prepareForSegue被调用两次,在演示文稿正在进行时尝试显示<UINavigationController>

Bub*_*Mop 11 objective-c ios

我是ios编程的新手,在这里问,但我一直都在访问!我很难理解为什么我遇到这个问题,它编译没有错误,我检查并检查了我的MainStoryboard中的所有插座和标识符.

我有2个UITableViewControllers,当用户选择表中的项时,我从第一个到第二个传递一个字符串,所以在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;            
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的ResultsViewController.m中

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

在NSlog读数中,我得到:...在进度视图中,(null)在结果中,(null)在进度视图中,正确的字符串警告:尝试出现在

然后,当我点击取消按钮返回firstTableview并再次按下详细信息视图时,它不再显示null ..

在进度视图中,结果中的右侧字符串,进度视图中的右侧字符串,右侧字符串

rde*_*mar 29

问题是在didSelectRowAtIndexPath之前调用prepareForSegue.您应该删除didSelectRowAtIndexPath方法,并在prepareForSegue中执行所有操作.您可以使用以下行来获取所需的indexPath:

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
Run Code Online (Sandbox Code Playgroud)

  • 可以实现`didSelectRowAtIndexPath`和`prepareForSegue`,但是你不应该自己执行转换(segue将执行它),你必须在`didSelectRowAtIndexPath`中调用`super`. (5认同)