これは、私にとってスタックオーバーフローの最初の投稿です。グーグルやドキュメントで調べても解決しない問題に遭遇したからです。
天気検索アプリである小さな iOS プロジェクトを取得します。基本的に全体的に実装するのは簡単ですが、従わなければならないルールがいくつかあります。
永続ストア (ディスク上) にリンクされているバックグラウンド スレッド上の 1 つの親コンテキスト。UI のメイン スレッド上の 1 つの子コンテキスト。Web サービスと通信するためのバックグラウンド スレッド上の 1 つの子コンテキスト。
これを見た後、私はオンラインで画像を見つけました:
この画像は、このプロジェクトで正確に何をすべきかを示しています。そして、私は今いくつかの問題を抱えています。
画像が示すように
[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]
、メイン UI MOC を定義するために使用し、NSPrivateQueueConcurrencyType を使用して webMOC と diskMOC を定義します。質問は、 [UIMOC performBlock: ^{......}] にすべて入れましょうか?私は今かなり混乱しています.UIはメインスレッドで実行されていませんか? NSMainQueueConcurrencyType のポイントは何ですか?
多くのドキュメントを読んだ後、childMOCとparentMOCの間でデータを共有する方法は、childMOCに「保存」関数を実行させるか、通知を介してマージ関数を呼び出すことであることがわかりました。(a) 最初のものについては、[childMOC を保存] してから [parentMOC を保存] する必要がありますか? または[childMOC保存]の後、parentMOCは自動的に更新されますか? (b) どちらの方法がより適切かわかりません。
上の画像には 3 レベルの MOC があります。最下位レベルの MOC で「保存」機能を実行すると、最上位レベルの MOC でデータを共有できますか?
私が考えたように、最下位レベルの MOC を最上位レベルの MOC と組み合わせて読み書きできないのはなぜですか? ところで途中のUIMOCはNSFetchedResultControllerを実行するためにContextのperformBlock関数に入れないといけないのでしょうか?