2

私はiOS開発に不慣れです。ユーザーがコア データ レコードを読み書きできるようにする iOS アプリを作成しています。これらのレコードは、http 経由でサーバーに同期されます。同期を実行するバックグラウンド スレッドで実行されている連鎖 (シリアル) NSOperations のセットがあります。

ユーザーは、sync us の実行と同時に読み取り/書き込みを行うことができます。私の計画は、アプリ内で 2 つの managedObjectContext を使用することです (どちらも同じ persistStoreCoordinator を使用します)。1 つはフォアグラウンド用、もう 1 つはバックグラウンド用です。

私の NSOperations によって作成されたすべてのバックグラウンド スレッドは連続して実行され、バックグラウンド MOC を使用します。すべての UI ベースのものはフォアグラウンド MOC を使用します。

私の質問はこれです: これは受け入れられる iOS コア データ パターンですか? ロックや同時実行の問題を気にせずに、これら 2 つの MOC 内の同じモデル データベースに対して読み取り/書き込みを実行できますか?

どうもありがとう。

4

1 に答える 1

3

これは一般的なコア データ パターンであり、フレームワークが対応するように設計されたものです。

自分でスレッドを管理している場合は、「スレッドの制限」と呼ばれる手法を使用する必要があります。詳細については、「コア データとの同時実行」というタイトルのセクションのドキュメントを参照してください。

スレッドの制限に加えて、iOS 5.0 には同時実行の管理を支援するように設計された新機能もあります。NSManagedObjectContextを で設定できるようになりましたNSManagedObjectContextConcurrencyTypeNSMainQueueConcurrencyTypeと から選択できますNSPrivateQueueConcurrencyType

メイン スレッドで実行されるコンテキストはNSMainQueueConcurrencyType、UI の提供に使用できます。のコンテキストNSPrivateQueueConcurrencyTypeは、バックグラウンド タスクに使用されます。

performBlock:プライベート コンテキストを使用するには、およびメソッドを介して対話しperformBlockAndWait:、コードが正しいスレッドで実行されるようにします。メイン キュー コンテキストを使用するには、通常どおり操作できます。コードがメイン スレッドで実行されていない場合は、ブロック メソッドを使用します。

これらの新機能については、ドキュメントでは詳しく説明されていません。「iOS v5.0 のコア データ リリース ノート」セクションにいくつかの情報があります。ただし、WWDC 2012 のセッション ビデオ「Session 214 - Core Data Best Practices」には、さらに洞察に満ちた議論があります。

于 2012-07-21T12:23:43.933 に答える