19

NSIncrementalStoreコア データを使用して Web サービスと対話するための最良の方法を研究していたときに、ポップアップが表示されてきました。

Drew Crawfordの記事、プログラミング ガイドクラス リファレンス 、およびこのチュートリアルをそれぞれ数回読んだ後でもNSIncremental、ストアとは何か、なぜ、いつ使用するのかを理解するのに苦労しています。

誰か説明してくれませんか?

ムンディの回答を読んだ後に編集
すると、さらにコンテキストが必要であることがわかります。構築中の Web サービスと組み合わせてコア データを使用することを検討しています。ユーザー情報をデバイスにローカルに保存し、接続があるときに Web サービスに投稿する最良の方法を見つけようとしています。コア データに関する知識が不足していたことが調査のきっかけとなりましたが、 の有用性を完全に理解することはできませんでしたNSIncrementalStore

4

3 に答える 3

34

注:このAPIは、2012年にこれを書いたときは最先端であり、詳細が変更されました。必要に応じて、これを更新してください。私は現在Cocoa/ObjCプロジェクトに取り組んでいないので、残念ながらこれを最新の状態に保つのは得意ではありません。全体的な要点は正しいようです。

Core Dataは、オブジェクトの永続性を管理するのに役立つツールのセットを提供します。つまり、NSManagedObjectある種のストレージからオブジェクトのセット()を保存してフェッチする機能です。

Core Dataオブジェクトを操作するときは、NSManagedObjectContextから取得したを使用して操作しますNSPersistentStoreCoordinator。次に、PSCはNSPersistentStore、ストアでの実際の操作を処理する1つ以上のサブクラスと通信します。(データベースに対して作成/読み取り/更新/削除を考えてください。)

Core Dataは、主に2種類のストアをサポートしていNSPersistentStoreますNSAtomicStore。永続ストアはデータベースと考えることができます。データベースから任意のレコードのセットを段階的に保存、更新、およびフェッチできます。アトミックストアは、オブジェクトグラフの「全か無かの」表現です。これは、構造化ファイルのメモリ内表現であることが意図されています。

CoreDataに付属しているストアタイプは次のとおりです。

  • NSSQLLiteStoreTypeNSPersistentStore
  • NSInMemoryStoreTypeNSPersistentStore
  • NSXMLStoreTypeNSAtomicStore
  • NSBinaryStoreTypeNSAtomicStore

NSPersistentStoreはサブクラス化することを明示的に禁止されているため、これまで、独自の非アトミックストアバックエンドを作成する方法はありませんでした。つまり、オブジェクトの表現を1つの大きな塊ではなく、断片的に永続化してクエリしたい場合(「グラフ全体をロード」、「グラフ全体を保存」)、運が悪かったのです。iOS5が導入されるまでNSIncrementalStore

NSIncrementalStoreは抽象クラス(からの子孫NSPersistentStore)であり、そのメソッドを実装して、制御するデータストアとコアデータの世界との間にアダプタを提供します。これを使用してリモートAPIをラップできます。または、気になる場合は、NULevelDBNanoStoreなどをラップできます(なぜそうするのかはわかりませんが)。

于 2012-06-22T17:13:49.220 に答える
5

簡単に言えば、Core Data で SQLite ストアを使用する場合、既にインクリメンタル ストアを使用していることになります。インクリメンタル ストアのすべての利点 (つまり、主にストア全体をメモリにロードする必要がない) は、既に自由に使用できます。

APIの具体的な適用に関しては、NSIncrementalStore最初に解決したい問題を正確に定義することをお勧めします。この API が必要かどうかは、プログラミング タスクの特定のニーズによって決まります。


質問の編集に応じて編集

私は単純に次のようにします: デバイスの Core Data エンティティでは、 attribute を持つことができますBOOL uploaded。Web サービスが利用可能になったら、アップロードを開始し、まだすべてのオブジェクトをプルしますuploaded

アップロードするには、オブジェクトをNSArrayおよびNSDictionaryに、おそらく JSON 形式に変換POSTして Web サイトに送信します。Web サイトがデータを保存したと応答したら、すべてのオブジェクトを としてマークしますuploaded

于 2012-05-05T09:22:13.487 に答える