11

私はiosプログラミングが初めてで、ここで質問していますが、いつも訪れています! この問題が発生する理由に困惑しています。エラーなしでコンパイルされ、MainStoryboard のすべてのアウトレットと識別子を確認しました。

私は 2 つの UITableViewControllers を持っています。ユーザーがテーブル内の項目を選択したときに、最初から 2 番目に文字列を渡しているので、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) 進行状況ビューで、正しい文字列の警告: Attempt to present on

次に、キャンセル ボタンを押して 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 に答える