タブバービューの管理対象オブジェクトコンテキスト
-
06-07-2019 - |
質問
わかりました。これは挑戦です。
Navigation Controller内にTableViewがあります。
ルートからプッシュします。ここには、新しいレコードを追加できる追加アクションがあります。うまくいきます。
今私がやろうとしているのは、このtableviewをTab Barビューに追加することです(Tab Bar Controllerは動作しません)が、同じNavigation Controller内にあります。
だから私がやりたいのはこれです:ルート> TabBarView(Tableviewをロード)>新しいレコードを追加します。
問題は管理対象オブジェクトのコンテキストにあり、「エンティティエラーが見つかりません」という全体が表示されます。修正方法がわかりません。
AddRecordモーダルビューコントローラーを取得してtabBarViewから表示することができましたが、ナビゲーションバーなしで表示されますが、単独のtableView(tabbarの外側)にレコードを追加しようとしても問題ありません。
TabBarViewのnavigationBarbuttonsからメソッドを呼び出し、tableviewsメソッドにルーティングします。
メソッドは実際のテーブルビューの代わりにtabBarViewから呼び出す必要があり、実際に呼び出されることは知っていますが、tabViewでMOCを管理する方法はわかりません。
ああ、これはコアデータのレシピと本に基づいているので、add recordメソッドが起動されると、新しいMOCを作成して作成し、完了したらメインMOCに再統合します。
アイデアはありますか
解決
いくつかの問題があるようです。
- "エンティティが見つかりません"エラー-これは、使用している管理オブジェクトコンテキストによって異なります。編集中のオブジェクトを管理するために別のMOCを作成した場合(これは良いアイデアです)、必ず永続ストアコーディネーターを割り当ててください。これは、MOCがどのオブジェクトが利用可能であるかを発見する方法です。アプリデリゲートで作成されたMOCを使用している場合は、エンティティの名前のスペルが正しいことを確認してください。
- シートにナビゲーションバーがありません-View ControllerをNavigation Controllerにプッシュすると、その
navigationItem
を使用してNavigation Barにデータが入力されます。 View Controllerをシートとして表示すると、View Controllerのみが表示されます。 Navigation Controllerに組み込まれていません。ナビゲーション項目を表示するには、View Controllerをルートとして新しいNavigation Controllerを作成し、Navigation Controllerのビューを表示する必要があります。
他のヒント
メインのMOCに関する限り、ビューとコントローラーは無関係である必要があります。使用しているコントローラーでMOCへの参照を取得し、そのMOCで操作します。アプリケーションデリゲートがメインMOCを作成する場合、それをそのデリゲートのプロパティにし、ビューまたはTabコントローラからアクセスします。
あなたが抱えているナビゲーションの問題にはあまり従いませんが、必要なときにナビゲーションバーがない場合は、UIViewControllerサブクラスを追加する場所にUINavigationControllerを作成して追加する必要があると思います。サブクラスを新しいUINavigationControllerのルートにし、コントローラーをタブなどに配置します。
管理オブジェクトコンテキスト(MOC)は、ナビゲーションやビューに依存しないようにしてください。それはモデルの一部です。 (ご存じのとおり、キャンセル可能な編集ビューの2番目のMOCは、エディターで使用するために作成した範囲までナビゲーションに依存します。