、私はストーリーボードとseguesを使用して、次のように私はよく、セグエを行う前に、先ビュー・コントローラにデータを渡す:セグエ:私のアプリで先のView Controllerおかしな
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.destinationViewController respondsToSelector:@selector(setMyData:)]) {
[segue.destinationViewController performSelector:@selector(setMyData:)
withObject:myData];
}
}
それは除いてどこでも動作します一箇所。セレクタが呼び出されると、データが設定されますが、セグが完了して宛先コントローラが表示されたら、設定したデータはありません。ビューコントローラのIDをソースビューコントローラとデスティネーションビューコントローラの両方に表示した後、上のコードのsegue.destinationViewController
は、表示されるコントローラとは異なるビューコントローラのインスタンスであることがわかりました。何が起きてる?
[UPDATE 1] I宛先ビューコントローラのライフサイクルに見え、それは第一セグエ実行中にロードされるが、私はそれにプロパティを設定した後!つまり、performSelector
を呼び出すと、ビューコントローラオブジェクトは初期化されません。これは、私が設定したデータが固執しない理由です。なぜこれが当てはまるのか、私のアプリの他の部分で同じアプローチがなぜ機能するのか分からない。
[更新日2] setMyData
の投稿はリクエストによって行われます。 locationToOpen
は公共の所有物なので、最初は私はこの方法を全く持っていませんでした。私はそれが呼び出され、デバッグ情報を印刷するために追加しました。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"NextSegue"])
{
DestinationViewController *dest = [segue destinationViewController];
dest.myData = self.myData;
}
}
をそしてDestinationViewController.hには、プロパティを作成する必要があります - - 次のように
- (void)setMyData:(MyData *)myData
{
DLog(@"self: %@", (id)self);
_myData = myData;
}
destinationViewControllerはUINavigationControllerですか? – adambinsz
@adambinsz:UINavigationControllerに埋め込まれたUIViewControllerです。 IBのセグはUIViewControllerにまっすぐ進みます。 – Macondo2Seattle
あなたはそれがナビゲーションコントローラにはないと確信していますか? – adambinsz