gpt4 book ai didi

ios - 核心数据和数据完整性 : read operations vs write operations. 如何保护?

转载 作者:行者123 更新时间:2023-11-28 22:19:20 31 4
gpt4 key购买 nike

我有一个我认为很简单的任务。

我有一个名为 [self getPerson] 的方法,该方法从 Web 服务为 Person 发出一个简单的 GET 请求,该请求返回一些 JSON,然后将 JSON 转换为NS 管理对象。检查现有的相同 Person NSManagedObject,如果未找到,则将 Person 保存到核心数据中。没问题。

但是,如果我连续两次触发此方法,我会得到两个 Person NSMangedObjects 持久保存到 Core Data 中。例如:

[self getPerson];
[self getPerson]; ---> yields duplicate `Person` objects saved in core data, no good.

如何确保在 Core Data 中只保存一个 Person 对象(不允许重复)?

我知道这个问题,只是不知道如何解决。问题是我需要一笔交易。当 [self getPerson] 第一次触发时,该方法检查已经存在的相同 Person 对象,没有找到,并将新的 Person 保存到核心数据中。这是对的。当我第二次触发 [self getPerson] 时,该方法检查一个已经存在的 Person 对象,没有看到一个,然后持久化另一个 Person 对象。这是不正确的。我想做到第二次、第三次、第四次,直到第 1000 次,检查现有的 Person 对象只会在 managedObjectContext save 操作完成后发生。现在对现有对象的检查发生得如此之快(在保存完成之前)。

我需要串行队列吗?如果是这样,这应该是 dispatch_async 还是 dispatch_sync?我什至想尝试使用 performSelectorWithDelay 技巧。

最佳答案

一旦您创建了对象,无论您是否调用保存,它都将存在于数据库中。所以你不应该创建一个已经存在的托管对象。尚不完全清楚您的代码逻辑是什么,但根据您的描述,您说您将 JSON 转换为托管对象,然后检查是否存在相同的现有对象,如果没有找到则保存。好吧,当您创建托管对象时,您已经创建了它,因此检查是否存在相同的对象为时已晚。如果尚未保存,则保存不会创建对象,它只是将其保存到商店中。

因此,首先检查是否存在具有 JSON 中属性的 person 对象,如果不存在,则创建一个托管对象。

关于ios - 核心数据和数据完整性 : read operations vs write operations. 如何保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20812213/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com