2012-03-20 2 views
0

私がやっていることは、UITableViewの現在選択されている行をUITabelViewの別のビューコントローラに渡すことです。これは、(種類の)動作しますが、私の変数が相互に馬跳びを再生している(いくつかの理由でオフ1であるように見える。)「現在選択されている行」を新しいビューコントローラに渡す(ちょっとした作業 - 1遅れて)

例:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    chosenProject = [[self activeProjectsList] objectAtIndex:[indexPath row]]; 

    self.selectedProject = chosenProject; 
    [self setSelectedProject:self.selectedProject]; 
    NSLog(@"PROJECT: %@",chosenProject); // Returns correctly. 

} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

if ([segue.identifier isEqualToString:@"ShowShots"]) { 

    NSLog(@"CURRENT: %@",chosenProject); // Returns NULL? 

    ShotListViewController *slVC = [segue destinationViewController]; 
    slVC.outputName = self.selectedProject; 

    } 
} 

初めてそれはNULLを返しますので、それは奇妙です、再度試してみると、最初に表示されるはずの最後に選択された行が返されます。NULLではありません。

私は、prepareForSegueが送信される前に変数が設定されていないと推測しています。なぜなら、受信時に常に1つ遅れているように見えるからです。

私はこれについて間違っているでしょうか、1つの変数を渡すだけですか?

+0

最初に新しいviewControllerで値を保持するvarをalloc'ingしinit'ingしているのですか、それとも最初のビューで設定されていますか? – CodaFi

+0

また、 '[self setSelectedProject:self.selectedProject];はselectedProjectを自分自身に設定しているので、絶対に何もしません。 – lnafziger

答えて

1

あなたは正しいと思います。 tableView:didSelectRowAtIndexPathはの後にと呼ばれ、行が選択され、segueが呼び出された後になります。

このコードを代わりにtableView:willSelectRowAtIndexPathに入れる必要があります。そのため、セグが完了する前に呼び出されるようにしてください。

+0

ああ良い悲しみ..どのように私はそれを逃しました!ありがとうございました! –

関連する問題