1

ビュー コントローラーからモーダルにタブ バー コントローラーを呼び出して、ユーザーが構成できるさまざまな追加のコントロールと入力を実装しています。ストーリーボードでこれを行うのは簡単ですが、コア データ管理オブジェクト コンテキストを、タブ コントローラーによってホストされるビュー コントローラーに渡すにはどうすればよいでしょうか? ここでの最良の設計アプローチは何ですか:

  1. ストーリーボードを忘れて、アプリのこの部分をコードで実行するには? それは簡単です。管理オブジェクト コンテキストを各ビューに渡してから、それらをタブ コントローラーに追加するだけです。
  2. タブ ビュー コントローラを起動するビュー コントローラに管理オブジェクト コンテキスト プロパティを追加するには? これは、宛先ビュー コントローラーのそれぞれでプロパティを使用して確かに可能presentingViewControllerですが、当初意図されたものではないようです。
  3. ルートView Controllerのいくつかのプロパティを介して直接通信しますか? Web でこれに関する参照を見たことがありますが、これについてはわかりません。

管理されたデータ コンテキストを除いdismissModalViewControllerて、元のビューに戻るために必要なメッセージ以外は何もありません。それ以外はすべて Core Data を介して管理されます。

4

2 に答える 2

1

いくつかのオプション:

  1. 中に管理対象オブジェクトのコンテキストを渡しますprepareForSegue(個々のビュー コントローラーを取得するには、タブ ビュー コントローラーのviewControllers配列にアクセスする必要があります)。
  2. アプリケーション デリゲート クラスまたは別のシングルトンのいずれかから、コア データ スタックがグローバルに利用できるようにアプリを構成します。その後、View Controller は、必要なときに管理オブジェクト コンテキストを要求できます。
  3. たまたま管理対象オブジェクト コンテキストを保持するタブ バー コントローラーのデリゲートとしてオブジェクトを設定するデリゲートの悪用を行う可能性があります。これは、タブ バー コントローラー内のすべてのビュー コントローラーから使用できるようになります。これは私が思いついたばかりで、おそらく悪い考えです。
于 2012-04-30T20:48:25.890 に答える
0

メインのビュー コントローラーが-prepareForSegue:メッセージを受け取るまでに、タブ バー コントローラーとそれが管理するビュー コントローラーは既に作成されています。次のように、セグエ自体からタブ バー コントローラーを取得し、タブ バー コントローラーからビュー コントローラーの配列を取得できます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UITabBarController *tbc = [segue destinationViewController];
    NSArray *controllers = [tbc viewControllers];
    NSLog(@"View Controllers: %@", controllers);
}

ここで、目的のコントローラーが実際にタブ バー コントローラーであることを確認するために、少しエラー チェックを行う必要がありますが、NSLog()をコードに置き換えて、好きなようにコントローラーを構成できます。あなたの目的のために、それは彼らが操作すべき管理対象オブジェクトのコンテキストを彼らに渡すことを意味します。

于 2012-04-30T20:52:54.310 に答える