iPhone-隣接していない2つのコントローラー間で配列を渡す
-
06-07-2019 - |
質問
API呼び出しを介してデータの配列を取得する「ダウンロード」View Controllerをロードすることから始まるアプリを構築しています。データが返されると、アプリはこのView Controllerのビューを非表示にし、2つのNavigation Controllerを収容するTab Bar Controllerをロードします。
最初のNavigation Controllerにプッシュされる最初のビューは、テーブルビューです。このテーブルビューでは、最初の「ダウンロード」View ControllerでAPI呼び出しから取得したデータを表示する必要があります。
誰かが「ダウンロード」とTable View Controllerの間でこのデータを渡す方法を説明してもらえますか?彼らはお互いについて知らないことを考慮してください。
重要な注意点は、Tab Bar Controllerをロードする前にデータをフェッチする必要があるため、それを使用するTable View Controller内から単純にデータをフェッチすることはできないということです。
解決
データはアプリケーションに従属するため、アプリケーションデリゲートはデータへのポインタを保持し、2つのビューは [[UIApplication sharedApplication] delegate]
を使用してデータにアクセスできます。
もう1つのオプションは、ダウンロードが完了したときに、データを含むメッセージをアプリケーションデリゲートに送信することです。あなたは、アプリがView Controller自体を隠すのではなく、View Controllerのビューを隠すと言っているので、あなたはすでにこのようなことをしていると思います。どういうわけか、ダウンロードが完了したことを知っている必要があります。そのため、ダウンロードコントローラーで:
- (void) downloadFinished {
[listener downloadFinished:data];
}
アプリケーションのデリゲート(前のスニペットの listener
):
- (void) downloadFinished:(NSData *)data {
CustomViewController *c = [[[CustomViewController alloc] initWithData:data] autorelease];
[downloadView removeFromSuperview];
[window addSubview:c.view];
}
カスタムView ControllerがNIBをロードし、テーブルからアクセスできるようにデータを保持する場所。