【问题标题】:How to synchronise Core Data relationships?如何同步 Core Data 关系?
【发布时间】:2011-11-08 08:48:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mysql ios sqlite core-data relationships


    【解决方案1】:

    假设你有一个Entity 对应WordCategory,你需要建立一个关系(命名可能有点模糊)。还假设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这样的谓词执行提取 按主键排序。
    4. 遍历每个数组。如果获取结果有我的记录,那么我会更新它。如果没有,那么我插入一个新的。
    5. 您需要为WordCategory 执行此操作
    6. 接下来获取构成关系一部分的所有对象
    7. 使用核心数据生成的适当方法来添加对象。例如类似 `[myArticle addWords:[NSSet setWithObjects:word1, word2, word3, nil];

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

    【讨论】:

    • 感谢您的回复...当您说“核心数据生成的适当方法”时,您到底是什么意思?您是否使用 XCode 自动生成模型?
    • 我通常使用 WYSIWYG 编辑model,然后执行File->New->New File->Core Data->NSManagedObjectSubclass 并为每个Entity 创建NSManagedObject 的子类。您可以查看生成的类的.h 文件并查看为关系生成的方法
    猜你喜欢
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多