2016-12-20 8 views
0

iOS 10のコアデータに関連する書籍、特にクエリ生成、NSPersistentContainer、新しいAPIでコンテキストの階層を新しい並行性で設定する方法については、モデルなどがあります。iOS 10のコアデータAPI使用率のパターン

すべてのコンテキストの親がnilに設定されている必要があります。最良の方法は、すべてのコンテキストを永続的ストーリーコーディネーターに直接接続することです。私たちの目的がアプリケーションの応答UIである場合、コンテキスト間に親子関係を設定する必要はありません。私は、次のような疑問を持っている:

  1. 私はコンテキスト私はバックグラウンドで実行するためにいくつかの作業を必要とするか、私は1つのコンテキストを作成する必要があり、それぞれの時間を作成するために、container.newBackgroundContext()メソッドを使用して、どこかに保存し、パフォーマンス向上のために、それを再利用する必要がありますか?私は何個の文脈を作り出すことができますか?何が最良のバックグラウンドコンテキスト数ですか?
  2. container.newBackgroundContext()から作成したプライベートコンテキストに対して、container.viewContextの親を設定する必要がありますか?
  3. メインスレッドではなくバックグラウンドスレッドの一部のデータを更新し、このメインについて通知するバックグラウンドタスクを作成する最良の方法は何ですかviewContext
  4. ユーザーがUIのメインviewContextに導入したモデルの変更について、バックグラウンドコンテキストに通知する最も良い方法は何ですか?
  5. iOS 10のアーキテクチャーと同時実行性の変更を含む、これらのトピックをカバーする書籍をいくつか知っていますか?
+0

[このコース](https://itunes.apple.com/us/course/developing-ios-9-apps-swift/id1104579961)には、コアデータを扱う2つの講義があります。基本ですが、出発点として役立つと思います。 – lmiguelvargasf

答えて

2
  1. これは一般的に行う必要はありません。特定のタスクのバックグラウンドコンテキストを作成し、それを破棄します。代わりに、NSPersistentContainerにはperformBackgroundTask()というメソッドがあります。これにブロックを渡すだけで、このブロックを実行するための新しいプライベートコンテキストが作成されます。
  2. Nope。 NSPersistentContainerはそれを扱っています。
  3. viewContextが変更されていることを確認した場合、バックグラウンドキューで保存する限り、この変更は有効になります。代わりに、NSFetchResultsControllerを使用してください。このメソッドには、変更に対応するための多数のデリゲートメソッドがあります。
  4. これは不要です。あなたが必要とするものをプライベートキューに入れておくと、マージポリシーによって競合がどうなるかが決まります。
  5. 残念ながら、変更はまだ比較的新しいです。 NSPersistentContainerWhat's New in Core Dataページのドキュメントをお読みください。
+0

あなたの答えをありがとう。私は何かを明確にする必要があります。 ** 3 ** privateContextからの変更はviewContextで 'automaticallyMergesChangesFromParent = true'を設定せずにviewContextにプッシュされますか? ** 4 **についてはどうですか? viewContextを保存すると私のプライベートコンテキストはプライベートコンテキスト 'automaticMergesChangesFromParent = true'に設定せずにこの変更を行いますか? –

+0

いいえ、親からの変更をマージできるプライベートコンテキストに興味があるのはなぜですか?このプロパティは、 'viewContext'の主な変更を見たい子のmainQueueコンテキストを作成するときに、より便利です。 – Abizern

+0

私のユースケースのシナリオはバックエンドからいくつかのデータを検索しているバックグラウンドタスクがあるということです。検索基準はローカルDBに格納されます。したがって、タスクが起動されると、この保存されたデータに基づいてクエリが作成され、要求が行われます。したがって、ユーザーがこの検索条件をUIで変更した場合、バックグラウンドタスクはこの変更を見て、ユーザーが設定した新しい基準に従って要求を準備する必要があります。このバックグラウンドタスクは、UIが表示できるデータをインポートすることです。 –

0

任意のコンテキストでautomaticallyMergesChangesFromParentをtrueに設定すると、すべての親コンテキストの変更がマージされます。 iOS 10では、NSPersistentContainerによって作成されたすべてのコンテキストは、コンテナのNSPersistentStoreCoordinatorを親として持っています。結果として、viewContextでこれをtrueに設定すると、newBackgroundContextに保存された変更は自動的にマージされ、その逆も同様です。

+0

この機能を使用しない理由はありますか?下位互換性や異なる理由からデフォルトではfalseです。 –

+0

コンテキストを分離したい場合、自動的に変更をマージする必要はありません。または、マージを制御したい場合は、独自のコードを作成して保存通知をキャッチし、マージするかどうかを選択します。ほとんどの場合、これをtrueに設定します。 iOS 10でも新しくなっているので、おそらくデフォルトはfalseに設定されているので、すべての人にその動作が変わることはありません。 – Jerry

+0

@Jerryあなたは、NSPersistentContainerによって作成されたすべてのコンテキストに親として永続ストアがあることを意味しましたか? – Maq

関連する問題