【问题标题】:How to load data into Core Data?如何将数据加载到 Core Data 中?
【发布时间】:2011-08-22 01:46:54
【问题描述】:

感谢您的帮助。

我正在尝试将核心数据添加到我的项目中,但我不知道将实际数据添加到持久存储的位置和方式(我假设这是存放原始数据的地方)。

我将有 1000 个

数据不会由用户更改,数据文件是手动输入的,所以我不需要在运行时更新这些文件,此时我不限于任何类型的文件-最轻的语法是首选。

再次感谢您的帮助。

【问题讨论】:

    标签: iphone core-data persistent-storage


    【解决方案1】:

    虽然我确信可以使用更轻的文件类型,但我会在应用程序包中包含一个 JSON 文件,您可以从中导入初始数据集。

    更新:有些人推荐 XML。 NSXMLParser 几乎与 JSONKit 一样快(但比大多数其他解析器快得多),但 XML 语法比 JSON 重。因此,包含初始数据集的 XML 捆绑文件将比 JSON 格式的文件更重要。

    【讨论】:

    • 好的,谢谢。我将研究制作 JSON 文件所涉及的内容。说到导入初始数据集,是在这段代码中: NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]stringByAppendingPathComponent: @".sqlite"]]; ?
    • 您对解析器有什么建议吗?此页面底部提供了一个简短列表:json.org
    • JSONKit 被认为是最快的,但 TouchJSON 可能是最普遍的。两者都包含将向您展示如何将 json 文件解析为 NSObjects 的文档,然后您可以将其保存到 CoreData。
    【解决方案2】:

    考虑到 Apple 考虑其持久存储实现细节的格式,交付预制 SQLite 数据库并不是一个好主意。 IE。字段和表格的名称可能在 iOS 版本/手机/您能想到的任何隐藏变量之间发生变化。一般来说,您不应该关心数据的序列化是如何格式化的。

    Apple 的开发者网站上有一篇关于导入数据的简短文章:Efficiently Importing Data

    您应该以您喜欢的任何格式发送初始数据(XML 允许您有效地进行增量解析,从而减少内存占用)并编写一个导入例程以在需要导入数据时运行。

    编辑:考虑到 EliBud 的评论,我仍然认为这种方法有点“不确定”... Core Data 使用的 SQLite 数据库的格式不是您想要生成的自己一个人(这很奇怪,简单地说,而且仍然不是您真正应该依赖的东西)。

    因此,您希望使用在模拟器上运行的模拟应用程序并使用 Core Data 创建数据库(根据 EliBud 的回答)。但是您仍然需要将数据导入到 that 模拟应用程序中!虽然在“真实”计算机上执行一次而不是在移动设备上执行多次(即复制文件很容易,导入数据很困难)可能是有意义的,但您实际上是在使用模拟器作为管理工具。

    但是,嘿,如果它有效的话......

    【讨论】:

    • 我不打算从在线资源中获取任何数据,而且我有数百个条目要输入,您仍然建议 XML 是最佳选择吗?从我看到的 XML 示例中,数据被很多语法包围,这似乎是不必要的额外工作——除非我需要解析?
    • 查看同一个文档,在最后一节(FAQ)中,它指出:“有几种方法可以创建数据。您可以创建一个单独的持久存储,其中包含默认数据并包含存储作为应用程序资源。当您要使用它时,必须将整个存储复制到合适的位置,或者将对象从默认存储复制到现有存储。从那我读到可以将数据库作为资源发送,我错过了什么吗?
    • @EliBud:嗯,你说得对……我承认我没有读过那部分,我很惊讶。所以,我猜……没关系?
    • @Ernest:优点:XML 在 iOS 中可以非常有效地解析,并且它是一种高度标准化的格式。请参阅:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/… 我很欣赏它基于流和内置(在 iOS 上添加外部库可能有点痛苦)。但是,是的,它非常冗长。您要手动创建初始数据吗?
    • 是的,我必须输入它。它不会从任何地方被剥离。我查看了 JSON 文件——因为我以前从未听说过它——它看起来很有吸引力,尤其是因为我的背景是 Java。我能看到的唯一缺点是我是否确实希望从在线内容中获得多功能性。所以在这一点上,我决定尝试 JSON 文件,我创建了一个小文件来测试。我的问题是如何将此文件放入CoreData?我已经在委托中获得了所有模板方法,我是否在此方法中包含我的文件名? - (NSPersistentStoreCoordinator )persistentStoreCoordinator,作为 NSURL
    【解决方案3】:

    您可以从 xml/csv/json 文件加载数据并在应用程序的第一顿午餐时创建数据库(如果数据库不存在,则读取数据并创建它)。 更好/更快的方法可能是在您的应用程序中发布您的 sqllite DB。您可以在模拟器上以您想要的任何格式解析文件,使用您的所有实体创建一个数据库,然后从 ApplicationData 中获取它并将其作为资源添加到您的应用程序中。

    【讨论】:

    • 谢谢。我还没有任何数据,但我对 SQL 非常熟悉。我认为最好按照您的建议创建一个数据库并发送它,但@vicvicvic 建议不这样做。在这一点上,我没有绑定任何数据格式,所以也许我会看看 json。
    • 请看我对@vicvicvic 回答的评论。
    猜你喜欢
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2013-10-08
    • 2010-12-02
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多