0

Webサーバー(MySQL)からデータを取得し、それを解析してCoreDataを使用してSQLiteデータベースに保存するアプリを作成しています。

MySQLデータベースには「words」テーブルがあります。各単語は「カテゴリ」に含めることができます。したがって、words tableには、テーブルを結合するための'category_id'のフィールドがあります。

これをアプリでローカルに複製する方法について頭を悩ませています。現在、MySQLデータベースの構造に一致するエンティティがありますが、関係はありません。私の「words」エンティティでは、「category_id」フィールドは必要ないようです(代わりに、1対1の「category」リレーションを設定する必要があります)。

このコアデータの関係をWebサーバーと同期させる方法について混乱していますか?

4

1 に答える 1

1

EntityあなたがforWordを持っていて、関係を築く必要があると仮定しますCategory(名前付けは少しぼんやりしているかもしれません)。Categoryまた、aが多くの単語を持つことができると仮定すると

// Word Entity
Relationship    Destination    Inverse
category        Categories     words

// Category Entity
Relationship    Destination   Inverse
words           Word          category       // To-Many relationship

すべての関係はCoreDataが維持するオブジェクトグラフを介して管理されるため、category_idフィールドは必要ありません。server_id各エンティティに(または同様の)主キーが必要です。そうしないと、すでに保存されているオブジェクトを更新/検索するのに問題が発生します。

これは、外部データベースからのデータの同期を処理する方法です(JSONでRESTfulインターフェイスを使用していますが、それは実際には重要ではありません)

  1. server_idでソートされたフィードを取得します
  2. フィード内のすべてのオブジェクトの主キー(server_id)を取得します
  3. ... @"(serverId IN %@)", primaryKeys 主キーでソートされたような述語を使用してフェッチを実行します。
  4. 各アレイをステップスルーします。フェッチ結果に私のレコードがある場合は、それを更新します。そうでない場合は、新しいものを挿入します。
  5. あなたは両方のためにこれをする必要があるでしょうWordそしてCategory
  6. 次に、関係の一部を形成するすべてのオブジェクトをフェッチします
  7. オブジェクトを追加するには、コアデータによって生成された適切なメソッドを使用します。例: `[myArticle addWords:[NSSet setWithObjects:word1、word2、word3、nil];

私がテストするのは難しいですが、これはあなたに出発点を与えるはずですか?スタックオーバーフローを使用している仲間のシャイニーコースの参加者を見るのは良いことです-それは私だけではありません

于 2011-09-01T12:42:18.933 に答える