Core Data 多上下文唯一性
Posted
技术标签:
【中文标题】Core Data 多上下文唯一性【英文标题】:Core Data multiple context uniqueness 【发布时间】:2014-06-14 07:38:55 【问题描述】:我正在使用下图中显示的核心数据堆栈。我想设计一个可以在两个工作上下文中创建对象的结构。
我在设置中观察到的是,如果两个上下文几乎同时尝试创建相同的对象(对于唯一键),db 最终会为表创建两行。有没有办法解决这个问题?提前感谢您的回复。
【问题讨论】:
【参考方案1】:确保唯一性的唯一方法是拥有一个协调对象,所有上下文都可以用来验证它们的操作(如果您愿意,可以使用“唯一性强制执行器”)。
一般算法描述为HERE,但是您属于“多线程/上下文”类别,这会使事情复杂化。
在多线程环境中,您的实施者必须先保存到存储区(使用其自己的托管对象上下文),然后再将结果返回给调用对象。
一般流程是(无缓存版本):
-
来自强制执行者的密钥上下文请求对象
执行器发出“处于锁定状态”的请求(锁定实际锁或使用串行调度队列)
-
enforcer 查询存储中的现有对象
为丢失的键创建对象并保存它们
-
您可能希望将对象标记为存根,因为调用者最终可能不会保存,并且它会给您一个标志,以便在您的视图中的获取请求中忽略它们
-
结果可能是
NSManagedObjectID
s 或在调用者上下文中导入的对象,否则您将面临跨上下文访问托管对象的风险
【讨论】:
以上是关于Core Data 多上下文唯一性的主要内容,如果未能解决你的问题,请参考以下文章
Core Data 使用多个上下文中的新对象从后台线程订购一对多关系保存
EF Core / Sqlite 一对多关系在唯一索引约束上失败
如何正确使用 Core Data 进行多线程处理? [关闭]