6

私のアプリにはUITableViewController、イベントリストを表示するものがあります。このコントローラーはManagedObjectContextSayを使用しParentContextます。これで、イベントが選択されている場合、ユーザーがイベントの詳細を編集できる詳細なViewControllerが表示されます。だから私は子コンテキストを作成しました、

ChildContext with type "NSPrivateQueueConcurrencyType"

ChildContext whose parent Context is "ParentContext".

私のコードは次のとおりです。

  NSManagedObjectContext *childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
  childContext.parentContext = self.context ;

ここでも、別のドリルダウンが必要なフィールドと関係がいくつかあります。だから私は新しいViewControllerのために別のChildContextを作成しました、

GrandChildContext with type "NSPrivateQueueConcurrencyType"

GrandChildContext whose parent context is "ChildContext"

このプロセスは別のレベルに進みます(親(tableView)から子までの合計4レベル)

self.context - Parent Context
  |
  |
ChildContext
  |
  |
GrandChildContext
  |
  |
GrandGrandChildContext

私のエンティティは次のようになります

EntityA           -- ( Edit View Controller  - uses ChildContext )
 |
 |- Field1
 |
 |- Field2
 |
 |- RelationShip (1 to Many ) - ( Relationship Add / Edit View Controller - uses GrandChildContext )
     |
     |- Field1
     |    .
     |    .
     |- Field3
     |
     |- Relationship ( 1 to Many ) - ( Relationship Add / Edit View Controller - uses GrandGrandChildContext )
            |
            |- Field1
            |
            |- Field2

これは、親子コンテキストを使用する正しい方法ですか?ある時点で私はのようになるからです1 NSMainQueueConcurrencyType MOC and 3 NSPrivateQueueConcurrencyType MOC

そうでない場合は?他に方法はありますか?

子コンテキストが多すぎると、アプリのパフォーマンスに影響しますか?

最初は、プロパティとNSArrayを使用してユーザーが入力したデータを管理し、ユーザーが[完了]ボタンを押すと、管理対象オブジェクトを更新/作成します。しかし、これは私のビューコントローラを汚す退屈な仕事です。そこで、更新を保存/破棄するのが非常に簡単な親子コンテキストに切り替えました。

ありがとう

4

2 に答える 2

4

複数の子コンテキストで少しやり過ぎたかもしれませんが、ほんの少しであり、一般的なアプローチは健全です。MOC(管理対象オブジェクトコンテキスト)は、かなり軽量なオブジェクトです。

各ビューコントローラ/シーン内で、そのシーンに適用されるMOCへの個別の参照を持つというあなたのアプローチが好きです。

MOCをセッションまたはスクラッチパッドとして考えると役立つ場合があります。対戦はMOCとエンティティの間ではなく、MOCと論理的な作業単位の間で行われます。

ドリルダウンの1つが、ユーザーが放棄/キャンセルしたい編集タスクの開始を示している場合は、子MOCをスピンオフして、新しいビューに渡す良い機会です。必要に応じて、ロールバックすることができます。または、開始点に戻るときにMOCを放棄することもできます。

一方、静的情報用のビューアを作成するだけの場合は、MOCを1つだけ使用します。その場合、それ以上使用する必要はなく、その恩恵も受けません。

于 2013-03-02T01:53:54.680 に答える
-1

ネストされた管理対象オブジェクトコンテキストの最良のユースケースについては、おそらく少し混乱があります。あなたの場合、単一のコンテキストのみを使用することをお勧めします。

アレイなどからコアデータに移行することは非常に良い考えでした。次に、オブジェクトグラフの真の力とシンプルさを解き放ちます。物事をシンプルに保つようにしてください。

ドリルダウンするには、コンテキストを子ビューコントローラーに渡すだけです。子ビューコントローラーがフェッチした結果コントローラーは、親ビューコントローラーと同じコンテキストを使用できます。多くのAppleコード例は、まさにこのパターンを使用しています。

コンテキストが必要なのは、本当に並行性が必要な場合だけです。これは、ここではまったく当てはまらないようです。データが取得されると、子ViewControllerの新しいインターフェイスが表示されます。それが長すぎる場合(たとえば、データがWebサービスからのものであるため)、ある種の「お待ちください」インターフェイスを表示し、データの取得が終了したら完全なインターフェイスを表示します。ほとんどの場合、これはあなたのシナリオではありません。

于 2013-02-22T17:37:37.753 に答える