如何将大量数据加载到 CoreData

Posted

技术标签:

【中文标题】如何将大量数据加载到 CoreData【英文标题】:How to load large amount of data into CoreData 【发布时间】:2014-02-18 20:28:42 【问题描述】:

我有一个使用本地文件初始化的 CoreData 数据库。 如下所示的 CoreData 架构:

Category -->> Objections -->> Responses -->> Evidence  

("-->>" 表示,有很多)

每个实体还有一个描述,长度可以从 2 到数千个字符不等,存储在 NSString 中。

问题:我如何存储这些数据,以便某人无需了解太多编程知识即可轻松编辑? (但也要遵循最佳实践)

目前,我正在考虑这些可能的方法:

1) 将所有内容存储在 1 个大 plist 文件中。这大约有 25 页长。 2) 将每个实体分离到它自己的 PList 文件中,并将每个值与 ID# 相关联,例如关系数据库。这将使文件的大小更易于管理,但您必须跟踪 ID#。 3) 同上,但使用 JSON

【问题讨论】:

如果要由不太了解编程的人进行编辑,这些选项中的任何一个听起来都像是自找麻烦。如果文件中的语法不完全正确,它们最终都会变成垃圾,必须有人清理。 你可能是对的。有什么建议吗? 几种可能性:(1)让这些人编辑电子表格并保存为 CSV,然后使用自定义脚本将数据转换为 plist 或 JSON 格式,(2)使用 plist 编辑器,如 @ 987654321@,或者 (3) 编写一个自定义数据输入应用程序,该应用程序可以读取和写入您的数据模型并且这些人可以使用该应用程序。 这与我的答案很接近。我也可能会这样做! :) 【参考方案1】:

创建一个使用 Core Data 的简单桌面应用程序。让人们在该桌面应用程序中编辑文件并将其存储在 Core Data 中。然后,当您发布您的应用程序时,您可以将该 SQLite 文件嵌入到您的 ios 应用程序中,这样就不需要启动解析。

为此创建一个不需要漂亮的 OS X 应用程序非常简单。最多花一两个下午,省去很多麻烦。

【讨论】:

最近做了类似的事情,使用 Mac 目标为应用程序创建罐头数据,然后将生成的 .sqlite 文件放入 iOS 应用程序包中。这样做很脏;谢谢你让我感觉不那么愚蠢。 我自己就是这样做的。它使在桌面应用程序中创建/维护数据变得更加容易。【参考方案2】:

在模拟器中运行,解析 plist 或 CSV(可能更容易,因为那是与 excel 兼容的格式)那里(在模拟应用程序中),然后将生成的数据库复制到您的 xcode项目并发布。

=>您的“内容提供者”可以使用 excel

=>您不必发送 CSV(或您使用的任何文件),因为您在模拟器中解析后拥有一个已填充的数据库

【讨论】:

在模拟器中编辑数据是一种痛苦的体验。从 ~/Library 目录中挖掘出 SQLite 文件对于非开发人员来说也并不令人兴奋。 这就是为什么我没有提出它。我建议在那里解析它 :) 我不会编写自定义应用程序,即使我可以避免它是微不足道的。如果编辑非常复杂,那么是的,但通常表现出色,并且可能某些公式有效(根据我的经验) 使用 IB 和 Core Data 之间的集成编写桌面应用程序来编辑 Core Data 几乎需要零时间。它几乎是一个编写一次的零代码应用程序。 也许是我们或只有我,但使用 osx 的“非技术人员”并不多。 ;) 这就是为什么。我很清楚这几乎没有工作:)【参考方案3】:

有一篇来自 Mattt Thompson 的关于 Core Data Libraries & Utilities 的好帖子:http://nshipster.com/core-data-libraries-and-utilities/,也许适合你。 =]

【讨论】:

以上是关于如何将大量数据加载到 CoreData的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JDBC 将大量数据加载到文件中而不会耗尽内存?

如何在每个 Worker 中的 Spark Dataframe 中加载数据,以防止将大量数据加载到 Master 节点

RestKit,核心数据,神奇的记录,大量数据和滞后的 UI

将大量数据从 DataFlow 加载到外部 postgres 数据库的最佳方法是啥?

从现有的数据库 ID 关系加载 Core Data 关系

CSV 将大量数据加载到 Pig 中