2011-09-01 107 views
0

我正在创建一个从Web服务器(MySQL)中提取数据的应用程序,使用Core Data将其解析并存储在SQLite数据库中。如何同步核心数据关系?

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

我有一些麻烦我的头围绕如何在我的应用程序在本地复制此。我目前有匹配MySQL数据库结构的实体,但没有关系。看起来在我的'词语'实体中,我不应该需要'category_id'字段(我应该有一个一对一的'类别'关系设置)。

我很困惑,如何保持这一核心数据关系的同步与Web服务器?

回答

1

假设您有EntityWordCategory您需要建立关系(命名可能有点模糊)。还假设Category可以有很多单词和

// Word Entity 
Relationship Destination Inverse 
category  Categories  words 

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

你是正确的,你不会需要CATEGORY_ID字段的所有关系通过对象图是核心数据的维护管理。您仍然需要在每个实体中使用主键(如server_id(或类似)),否则在更新/查找已保存的对象时将遇到问题。

这是我如何处理同步数据从外部数据库(我用的RESTful接口,使用JSON但其实并不重要)

  1. 抓斗由SERVER_ID
  2. 排序的饲料获取的主键( SERVER_ID)进料
  3. 中的所有对象的执行取使用谓词等... @"(serverId IN %@)", primaryKeys 这是由主键进行排序。
  4. 逐步通过每个阵列。如果提取结果有我的记录,然后我更新它。如果没有,我插入一个新的。
  5. 您将需要两个WordCategory
  6. 接下来这么做取形成的关系
  7. 使用的核心数据添加对象产生适当的方法一部分的所有对象。例如像`[myArticle addWords:[NSSet setWithObjects:word1,word2,word3,nil];

这是我很难测试,但这应该给你一个起点? 良好的使用堆栈溢出看到一个家伙闪亮当然参加者 - 它不只是我

+0

感谢您的答复。当你说“的核心数据生成适当的方法”究竟是什么意思呢?您是否使用XCode自动生成模型? – Rich

+0

我通常使用WYSIWYG编辑'model',然后执行'File-> New-> New File-> Core Data-> NSManagedObjectSubclass'并为每个'Entity'创建'NSManagedObject'的子类。您可以查看生成的类的'.h'文件并查看为关系生成的方法 –