Core-Data:想要将新的 web xml 内容持久保存到我的数据存储中,而不是替换现有的

Posted

技术标签:

【中文标题】Core-Data:想要将新的 web xml 内容持久保存到我的数据存储中,而不是替换现有的【英文标题】:Core-Data: Want to persist new web xml stuff to my data store rather than replace existing 【发布时间】:2010-01-07 23:27:53 【问题描述】:

我有一个加载核心数据的应用程序,然后调用 XML Web 服务来获取更新的数据。我基本上希望我的应用程序,而不是擦除所有数据并加载所有内容(包括新的)以保持不变,我希望它只将新内容添加到现有堆栈中(不重复)。

这样的事情的普遍共识策略是什么?

【问题讨论】:

【参考方案1】:

我从所有持久化对象中获取一个NSSet*,然后使用一个新的托管对象对这组NSManagedObject 实例执行交集操作,该对象填充了来自单个 XML 元素及其内容的数据。

如果那个交叉点还剩下一些东西,这意味着我的数据存储中已经有那个元素。因此,我使用 XML 元素中的数据更新现有的、已经持久化的托管对象的属性并保存,丢弃新的托管对象。

如果我有一个空集,则新创建的托管对象会直接保存到数据存储中。

我没有可用的哈希值来比较持久数据和 XML 数据,所以这工作得相当好。

【讨论】:

交叉路口?对不起,伙计,我不确定我是否完全遵循 当您从 Core Data 存储中执行提取时,您可以检索任何实体类型(例如“Book”、“Recipe”)的托管对象的NSSet*NSSetNSMutableSet 类包含几种基本集合操作的方法,例如交集、联合等。您可以使用这些方法来确定两个集合是否具有共同的元素(例如托管对象),这将有助于您的应用程序决定是否需要更新现有对象或添加新对象。换句话说,如果您将 Core Data 视为一个圆圈,而将您的 XML 视为另一个圆圈,请在它们之间绘制维恩图。【参考方案2】:

如果您的 xml 数据集中的每个项目都有一个唯一键,您可以使用该键查找现有记录并使用新信息更新它

【讨论】:

【参考方案3】:

就像 Corey 所说的,找到一个唯一的键来在您的数据中使用。在原始数据中搜索该键,如果找不到,则该对象是一个新对象,可以插入。如果对象已经在原始数据中,则丢弃它。

如果数据有可能随着时间的推移而更新(对象在 Web 端更新),那么您必须比较旧 (iphone) 对象和具有相同键的新对象。如果它们完全相同,请丢弃新的。如果没有,请更换旧的。

如果没有可以使用的唯一键,则必须对所有对象进行此比较。我不确定比较两个托管对象的最快方法,但您可以尝试使用新(网络)数据创建一个托管对象,并将其与原始对象中的每个对象进行比较。

【讨论】:

以上是关于Core-Data:想要将新的 web xml 内容持久保存到我的数据存储中,而不是替换现有的的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不使用 XDocument 的情况下将新的 xml 数据附加到 xml 文件中的现有 xml?

如何使用 core-data 存储一个值? (迅速 2)

Swift - 将新的 UIWINdow 定位在屏幕中心

Core-Data 后台保存性能问题

如何将新的SVG图标添加到字体真棒[重复]

在 Flutter 中按下按钮时将新的小部件作为列表插入