核心数据多重上下文唯一性

时间:2014-06-14 07:38:56

标签: ios objective-c core-data

我正在使用下图所示的核心数据堆栈。我想设计一个可以在两个工作者上下文中创建对象的结构。

我在设置中观察的是,如果两个上下文同时尝试在同一时间创建相同的对象(对于唯一键),则db最终会为表创建两行。有办法解决这个问题吗?提前感谢您的回复。

enter image description here

1 个答案:

答案 0 :(得分:0)

唯一可以确保唯一性的方法是拥有一个所有情境都会转向的协调对象来验证他们的操作(如果你愿意的话,还有#34;唯一性执行者")

一般算法被描述为HERE,但是你属于"多线程/上下文"类别,这会使事情复杂化。

在多线程环境中,执行者必须在将结果返回给调用对象之前对存储执行保存(使用自己的托管对象上下文)。

一般流程是(无缓存版本):

  1. 来自执行者的密钥的上下文请求对象
  2. 执行者发出请求"在锁定" (锁定实际锁或使用串行调度队列)
    1. 执行者查询商店以查找现有对象
    2. 为缺少的密钥创建对象并保存它们
      1. 您可能希望将对象标记为存根,因为调用者最终可能无法保存,并且会在您的视图中的提取请求中为您提供一个忽略它们的标记
    3. 使用他创建的对象构建结果数组
      1. 结果可能是调用者上下文中的NSManagedObjectID或导入的对象,否则您将面临托管对象的跨上下文访问风险