首页 文章

如何同步核心数据关系?

提问于
浏览
0

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

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

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

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

1 回答

  • 1

    假设你有 EntityWordCategory ,你需要 Build 一个关系(命名可能有点模糊) . 假设一个 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接口,但这并不重要)

    • 抓取按server_id排序的Feed

    • 获取Feed中所有对象的主键(server_id)

    • 使用类似 ... @"(serverId IN %@)", primaryKeys 的谓词执行提取,该谓词按主键排序 .

    • 逐步浏览每个数组 . 如果获取结果有我的记录,那么我更新它 . 如果没有,那么我插入一个新的 .

    • 您需要为 WordCategory 执行此操作

    • 接下来获取构成关系一部分的所有对象

    • 使用核心数据生成的适当方法添加对象 . 例如像`[myArticle addWords:[NSSet setWithObjects:word1,word2,word3,nil];

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

相关问题