【问题标题】:Core Data multiple context uniquenessCore Data 多上下文唯一性
【发布时间】:2014-06-14 07:38:55
【问题描述】:

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

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

【问题讨论】:

    标签: ios objective-c core-data


    【解决方案1】:

    确保唯一性的唯一方法是拥有一个协调对象,所有上下文都可以用来验证它们的操作(如果您愿意,可以使用“唯一性强制执行器”)。

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

    在多线程环境中,您的实施者必须先保存到存储区(使用其自己的托管对象上下文),然后再将结果返回给调用对象。

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

    1. 来自强制执行者的密钥上下文请求对象
    2. 执行器发出“处于锁定状态”的请求(锁定实际锁或使用串行调度队列)
      1. enforcer 查询存储中的现有对象
      2. 为丢失的键创建对象并保存它们
        1. 您可能希望将对象标记为存根,因为调用者最终可能不会保存,并且它会给您一个标志,以便在您的视图中的获取请求中忽略它们
      3. 用他创建的对象构建结果数组
        1. 结果可能是 NSManagedObjectIDs 或在调用者上下文中导入的对象,否则您将面临跨上下文访问托管对象的风险

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多