【问题标题】:iOS - Importing data into CoreDataiOS - 将数据导入 CoreData
【发布时间】:2015-12-22 07:15:14
【问题描述】:

我需要在 iOS (7+) 应用程序的数据库中导入一些数据。

当我使用 Coredata 时,最好的方法似乎是创建一个种子数据库:https://www.objc.io/issues/4-core-data/importing-large-data-sets-into-core-data/ 这意味着我必须创建第二个项目(例如:桌面应用程序),该项目负责创建和填充数据库。

我的第一个问题是:这个项目的数据库模型应该和应用程序的模型相同吗?因此,如果应用程序有一个包含许多实体的数据库,则必须在第二个项目的模型中复制整个结构,并且对于任何未来的更新,这两个结构必须保持相同。 我说的对吗?

这似乎很难完成和维护,而且查找和复制种子 sqlite 文件的过程并不简单。

也就是说,由于我需要将大约 80k 条目导入到单个表中,那么在 iOS 应用程序中包含一个 csv 文件并在第一次启动时导入所有数据呢?

感谢您的任何提示, 丹

【问题讨论】:

    标签: ios sqlite core-data import seed


    【解决方案1】:

    db模型是否应该相同:不需要

    CoreData 不是 db,所以你可以拥有比传统 db 更灵活的模型

    如果您选择维护与服务器使用的模型或API 返回的模型不同的模型,则可以在保存到 CoreData 之前使用中间模型。

    我个人使用Mantle

    所以结构将是CoreData MantleAPI

    这将为您提供更大的灵活性,因为您可以从 API 接收任何结构并使用 Mantle 来管理您在应用中使用的结构。

    ps:一般来说,您不希望经常更改数据模型。如果您的数据模型不断变化,可能是时候重新考虑结构

    要导入条目,您可以使用 JSON 文件。

    1. 将 JSON 文件添加到您的项目中
    2. 当应用首次启动时,反序列化 JSON 文件,循环遍历它并为 JSON 中的每个项目创建新实体

    请注意,如果您有 80k 个条目,这可能需要很长时间

    This tutorial 告诉你你需要做什么

    【讨论】:

    • 您建议的教程准确地解释了我上面描述的场景:使用单独的实用程序项目创建种子数据库(而不是在首次启动时填写应用程序数据库)。我担心的是让这两个模型在未来的任何更新中保持一致。假设 iOS 应用程序有一个包含实体 A、B、C 和 D 的模型,即使只需要预填充 D,实用程序项目的核心数据模型也必须与所有四个表具有完全相同的结构。此外,向应用程序添加新实体 - E - 也需要将其添加到实用程序项目模型中。
    • 嗨@DAN 确实最简单的方法是保持模型(服务器和应用程序)相同。是的,管理起来很麻烦。我更新了我的答案。
    猜你喜欢
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2011-04-24
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多