0

テーブルビューでUIViewController(View Controller)を使用して、別のUIViewController(Detail View Controller)にデータを送信しようとしています。私のコードは次のようになります。

//ViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"grapedetail"];
    detail.grape = [self.grapes objectAtIndex:indexPath.row];
    currentGrape = [self.grapes objectAtIndex:indexPath.row];
    NSLog(@"%@",currentGrape.searchName);
    [self.navigationController pushViewController:detail animated:YES];
    [self performSegueWithIdentifier:@"toGrapeDetail" sender:self];
}

//DetailViewController.m
- (void)viewDidLoad
{
    //obtain grape from table view
    //grape = ((ViewController *)self.presentingViewController).currentGrape; //I have also tried this method for obtaining the variable with the same result
    NSLog(@"Detail view says: %@",grape.searchName);
    //etc...
}

アプリをビルドした後、View Controllerに移動し、テーブルセルを選択してDetailViewControllerに移動します。これが私の出力ログです:

2012-07-23 08:13:27.430 GrapeKeeper[593:f803] Detail view says: (null)
2012-07-23 08:13:27.432 GrapeKeeper[593:f803] Alarije

このことから、変数が正しく渡されるように、元のVCが最初に発生することを明確に望んでいますが、詳細ビューviewDidLoadは元のVCの前に呼び出されているようです。didSelectRowAtIndexPathこれを修正するにはどうすればよいですか?

4

1 に答える 1

1

はい、これは私が最初に遭遇したときは非常に奇妙に見えましたが、それはそのままです。

秘訣は、のprepareForSegue:sender:代わりにで作業を行うことですdidSelectRowAtIndexPath:。そうすれば、ターゲットコントローラーをセグエの宛先として使用できます。

(ただし、コントローラーをプッシュしているのか、セグエに実行させているのかに関して、コードは少し混乱しているように見えます。)

于 2012-07-23T12:29:37.207 に答える