使用 pList 更新核心数据

Posted

技术标签:

【中文标题】使用 pList 更新核心数据【英文标题】:Using a pList to Update Core Data 【发布时间】:2013-12-06 15:55:41 【问题描述】:

可以在这里使用一些指导。我每天都会更新 15,000 多条 XML 格式的记录数据库。这是我使用 Core Data 的应用程序的源数据。 XML 转储的内容每天都会以下列方式发生变化: 1) 一些记录将被删除。 2) 将添加新记录。 3) 现有记录可能会被修改。

使用此 XML 文件的每日更改更新 Core Data 的最佳方法是什么?我的想法是我将不得不遍历 pList 并以某种方式将其与 Core Data 中已有的内容进行比较。不知道该怎么做。

我在网站上搜索并找到了这篇文章,但不确定这是否是我需要做的:Initialize Core Data With Default Data

提前谢谢你。 达林

【问题讨论】:

记录是否易于比较(使用 UID 等)? 每条记录都有一个唯一的 6 位密码。 您的总数据库有多大?每天变化的比例是多少? XML 格式是否在您的控制之下?您是否有一个在您的控制之下可以操作数据的服务器? XML 到 Core Data 的转换是在 ios 设备还是 Mac 上完成的? 您真的需要更新现有的商店,还是可以完全用新数据替换它? 【参考方案1】:

您没有具体说明,但我猜您的数据库总大小为 15,000 多条记录,并且您的 XML 更新包含所有这些记录的值。以下是一些需要考虑的想法。

XML 记录是否包含最后修改日期?如果没有,你能补充一下吗?然后记下您的 Core Data 版本上次更新的时间,并忽略所有早于该版本的 XML 记录。

对于已删除的记录,您必须在 Core Data 中找到它们,然后将其删除。如果您将获取请求的结果类型设置为NSManagedObjectIDResultType,您可能会看到更好的性能。 NSPersistentObjects 不需要完全实现就可以删除它们。

如果您对未注明日期的 XML 感到困惑,请尝试添加一个仅用于更改检测的实体。存储相关记录的 6 位密码和整个原始 XML 字符串的-hash。更新后,获取 pin/hash 对并进行比较。如果哈希值相同,则数据不太可能发生变化。

这将变成一个优化问题。最好的方法将取决于数据的特征:属性数量、记录大小、每次每日更新中的增量大小。构建您的获取请求谓词以最小化您执行的获取请求的数量(例如,通过使用“IN”运算符传递多个 6 位密码)。如果您只需要一个属性,请考虑使用NSDictionaryResultType。先测量,再优化。

【讨论】:

哈尔。这次真是万分感谢!只是为了给您更多信息,为了方便起见,我无法访问 XML 文件来添加其他字段。该文件是来自 HR 系统的转储,其中包含员工联系信息(姓名、地址位置等)。每天都会有添加和删除,但对现有记录的更改可能不会那么多。我喜欢你关于 -hash 的想法。虽然我以前从未编写过类似的代码并且不知道该怎么做,但我理解其中的逻辑并且可以看到它是如何工作的。

以上是关于使用 pList 更新核心数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 plist 将数据插入核心数据时卡住

请帮助理解保存数据。核心数据与 plist

搜索核心数据与 Plist

将 plist 加载到核心数据中

保存数据 - 核心数据与 plist 文件

在 iOS 中使用 json 数据更新 plist