11

我是 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;            
    }
}

在我的 ResultsViewController.m

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

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

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

在进度视图中,正确的字符串在结果中,正确的字符串在进度视图中,正确的字符串

4

3 回答 3

29

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

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
于 2013-02-18T18:11:58.737 回答
4

罗布的回答也帮助了我 - 谢谢!我正在用 Swift 编码,所以对于那些在 Swifting 中遇到这种情况的人,这里是如何在 Swift 3 中点击索引(或索引行):

var rowClicked = (self.tableView.indexPathForSelectedRow?.row)!
于 2016-12-04T11:36:53.100 回答
0

可能你的segue是从表格视图单元而不是视图控制器开始连接。

我有同样的问题,我从表格视图单元格中删除了 segue 并在视图控制器级别添加回。

在此处输入图像描述

于 2019-09-12T03:48:22.747 回答