0

我正在创建一个应用程序,该应用程序从 Web 服务器 (MySQL) 中提取数据,对其进行解析并使用 Core Data 将其存储在 SQLite 数据库中。

MySQL 数据库有一个“单词”表。每个单词都可以在一个“类别”中。所以单词表有一个“category_id”字段来加入表。

我很难弄清楚如何在我的应用程序中本地复制它。我目前有与 MySQL 数据库结构匹配的实体,但没有关系。似乎在我的“单词”实体中,我不需要“category_id”字段(我应该设置一对一的“类别”关系)。

我对如何保持这种核心数据关系与网络服务器同步感到困惑?

4

1 回答 1

1

假设你有一个EntityforWord并且Category你需要建立一个关系(命名可能有点模糊)。还假设一个Category可以有很多单词和

// Word Entity
Relationship    Destination    Inverse
category        Categories     words

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

您是对的,您不需要 category_id 字段,因为所有关系都通过 Core Data 维护的对象图进行管理。您仍然需要server_id在每个实体中使用类似(或类似)的主键,否则您将无法更新/查找已保存的对象。

这就是我处理从外部数据库同步数据的方式(我使用带有 JSON 的 RESTful 接口,但这并不重要)

  1. 抓取按 server_id 排序的提要
  2. 获取提要中所有对象的主键(server_id)
  3. ... @"(serverId IN %@)", primaryKeys 使用按主键排序的谓词 like 执行提取。
  4. 逐步浏览每个数组。如果获取结果有我的记录,那么我会更新它。如果没有,那么我插入一个新的。
  5. 您需要为两者执行此操作,Word并且Category
  6. 接下来获取构成关系一部分的所有对象
  7. 使用核心数据生成的适当方法来添加对象。例如类似`[myArticle addWords:[NSSet setWithObjects:word1, word2, word3, nil];

我很难测试,但这应该给你一个起点?很高兴看到一个使用堆栈溢出的 Shiny 课程参与者——不仅仅是我

于 2011-09-01T12:42:18.933 回答