如何同步核心数据关系?

时间:2011-09-01 12:16:56

标签: mysql ios sqlite core-data relationships

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

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

我无法理解如何在我的应用中本地复制此内容。我目前有实体匹配MySQL数据库的结构,但没有关系。似乎在我的“单词”实体中我不需要'category_id'字段(我应该设置一对一的'类别'关系)。

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

1 个答案:

答案 0 :(得分:1)

假设EntityWordCategory,您需要建立关系(命名可能有点模糊)。假设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. 排序的Feed
  3. 获取Feed中所有对象的主键(server_id)
  4. 使用类似... @"(serverId IN %@)", primaryKeys之类的谓词执行提取 这是按主键排序的。
  5. 逐步浏览每个数组。如果获取结果有我的记录,那么我更新它。如果没有,那么我插入一个新的。
  6. 您需要为WordCategory
  7. 执行此操作
  8. 接下来获取构成关系一部分的所有对象
  9. 使用核心数据生成的适当方法添加对象。例如像`[myArticle addWords:[NSSet setWithObjects:word1,word2,word3,nil];
  10. 我很难测试,但这应该给你一个起点? 很高兴看到一个使用堆栈溢出的Shiny课程参与者 - 这不仅仅是我