【发布时间】:2013-12-28 07:40:03
【问题描述】:
我有一个我认为很简单的任务。
我有一个名为[self getPerson] 的方法,它从Web 服务对Person 发出简单的GET 请求,该请求返回一些JSON,然后将JSON 转换为NSManagedObject。检查现有的相同Person NSManagedObject,如果没有找到,则将Person 保存到核心数据中。没问题。
但是,如果我连续两次启动此方法,我会得到两个 Person NSMangedObjects 持久化到核心数据中。例如:
[self getPerson];
[self getPerson]; ---> yields duplicate `Person` objects saved in core data, no good.
如何确保只有一个 Person 对象保存在 Core Data 中(不允许重复)?
我知道问题所在,只是不知道如何解决。问题是我需要一笔交易。当 [self getPerson] 第一次触发时,该方法检查已经存在的相同 Person 对象,没有找到,并将新的 Person 保存到核心数据中。这是对的。当我第二次触发[self getPerson] 时,该方法会检查一个已经存在的Person 对象,但没有看到一个对象,然后会保留另一个Person 对象。这是不正确的。我想让第二次、第三次和第四次到第 1000 次,检查现有的 Person 对象只会在 managedObjectContext saveoperation 完成后发生。现在检查现有对象的速度非常快(在保存完成之前)。
我需要串行队列吗?如果是这样,这应该是dispatch_async 还是dispatch_sync?我什至玩过尝试使用performSelectorWithDelay 技巧的想法。
【问题讨论】:
标签: ios core-data concurrency grand-central-dispatch nsoperationqueue