2011-08-14 6 views
10

私のアプリは、インターネット経由で大規模なjsonファイルを取得し、コアデータに解析します。コアデータのあらかじめ埋め込まれたバージョン?

これは問題ありませんが、このコアデータデータベースの既に埋め込まれているバージョンを自分のアプリにどのようにして入手することができますか。ユーザーは後で更新することもできます。

答えて

2

Core Dataデータベースは、SQLiteデータベースファイルです。メインバンドルで配布してから、ドキュメントフォルダにコピーしてから永続的なストアコーディネータに関連付けることができます。

9

Ray Wenderlich's siteにあらかじめロードすることに関する合理的なチュートリアルがあります。

一般的には、別のプロジェクトを作成し、JSONファイルをコアデータデータベースに解析します。実際のプロジェクトを作成し、オブジェクトモデルとデータベースファイルをこの新しいプロジェクトにコピーします。

アプリの起動時に、データベースがドキュメントのディレクトリに存在するかどうかをチェックし、そうでない場合は、アプリケーションバンドルから事前入力済みのものをコピーします。

永続的ストアコーディネータがドキュメントフォルダ内のデータベースで動作し、アプリケーションバンドル内のデータベースでは動作しないことを確認してください。

アップデート2012年6月

私はGitHubの上の小さなサンプルプロジェクトは、コアデータのためのデータをプリロードするためにiPadのプロジェクトとOS XのプロジェクトにXcodeのワークスペースを使用して実証PromNightと呼ばれる持っています。これは、2つのアプリケーション間で共有されるオブジェクトモデルを使用し、プリロード時に変更を同期させるのに役立ちます。

+1

+1 Ray Wenderlich。 – Moshe

4

コアデータは基本的にsqliteデータベース(またはMac OSではオプションでXMLファイル)であるバッキングストアを使用します。そのファイルをアプリのバンドルに追加し、アプリと共に同梱してください。限り、データベースにデータを取得することと、ここで私はどうなるのかです:

  1. あなたはそれを持っているどんな形式からデータをインポートするためにいくつかのコードを書く
  2. そのコードを実行します。
  3. sqliteファイルをデバイスまたはシミュレータからコピーします。
  4. 新しく作成したsqliteファイルをXcodeのプロジェクトに追加します。

私はCore Dataがシーンの背後にいくつかの "voodoo"をして、sqliteを混乱させることで何かを壊すことができるので、sqliteファイルを手作業で作成しません。また、私は開発者が複数のターゲットを使用しているのを見ました。輸入のために。このようにして、コンパイラでコードを記述し、プロジェクトのメンテナンスについて心配する必要はありません。例:

#ifdef kImportTarget 

//run core data import 

#else 

// run the Core Data stack setup from an existing file 

#endif 
+0

iOSでは、XMLバッキングストアのオプションがないと思います。それはMac OSのオプションですが。 – Abizern

+0

@Abizern - 本当ですか?おそらくあなたは文書から引用を見つけることができますか? – Moshe

+0

はい、私は確信していますhttp://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdPersistentStores.html言う通り - XMLストアはiOSでは利用できません。 – Abizern

関連する問題