子 NSManagedObjectContext 中的 NSOrderedSet 在保存时会丢失顺序

Posted

技术标签:

【中文标题】子 NSManagedObjectContext 中的 NSOrderedSet 在保存时会丢失顺序【英文标题】:NSOrderedSet in child NSManagedObjectContext loses order when saved 【发布时间】:2019-04-27 13:47:02 【问题描述】:

我有一些具有一对多父子关系的 NSManagedObjects,其中“children”属性是 NSOrderedSet。

当我创建一个新的孩子时,我在一个孩子 NSManagedObjectContext 中这样做。我在子集的索引 0 处插入子元素。

在我保存子上下文之前,我观察到父母的孩子看起来像:

父母

孩子1 孩子2 孩子3 Kid4(新)

但是当我继续保存父上下文时,我检查了“updatedObjects”属性,发现父级的子级排序不正确!

父母

孩子1 孩子2 孩子3 Kid4(新)

注意: 这只发生在新创建的孩子身上。如果在我创建子上下文时孩子已经存在,我可以更改它们在子上下文中的顺序,并且它们在有序集中的位置会适当地保存在父上下文中。

我尝试过弄乱父子上下文的合并策略。现在它们被配置为默认的错误策略,保存时不会抛出任何错误。

【问题讨论】:

我假设在该关系的数据模型检查器中,ordered 复选框已打开。另外,我想您需要发布一些代码来显示如何将新孩子添加到关系中。 【参考方案1】:

我的主要问题与跨线程核心数据的使用有关。

我预计跨线程滥用的症状会更明显,但这就是它们对我的表现。确保我从所有线程正确访问托管对象上下文解决了我的问题。

【讨论】:

以上是关于子 NSManagedObjectContext 中的 NSOrderedSet 在保存时会丢失顺序的主要内容,如果未能解决你的问题,请参考以下文章

子 NSManagedObjectContext 中的 NSOrderedSet 在保存时会丢失顺序

父 NSManagedObjectContext 在子保存后没有变化,但仅在发布模式下(在调试模式下工作)

保存子 NSManagedObjectContext 时在 NSOrderedSet 上调用额外不正确的 KVO 插入

NSManagedObjectContext 从私有上下文合并,只刷新改变的对象

取消 NSManagedObjectContext performBlock

保存父 NSManagedObjectContext 时出错