child NSManagedObjectContext 中的 NSOrderedSet 在保存时丢失顺序
NSOrderedSet in child NSManagedObjectContext loses order when saved
我有一些具有 one-to-many parent-child 关系的 NSManagedObjects,其中 "children" 属性 是一个 NSOrderedSet。
当我创建一个新的 child 时,我是在 child NSManagedObjectContext 中创建的。我在 children 集合的索引 0 处插入 child。
在我保存 child 上下文之前,我观察到 parent 的 children 看起来像:
Parent
- 孩子 1
- Kid2
- Kid3
- Kid4(新)
但是当我继续保存 parent 上下文时,我检查了 "updatedObjects" 属性 并看到 parent 的 children 是有序的错误!
Parent
- 孩子 1
- Kid2
- Kid3
- Kid4(新)
注意:
这只会发生在新创建的 children 上。如果在我创建 child 上下文时 children 已经存在,我可以更改它们在 child 上下文中的顺序,并且它们在有序集中的位置会适当地保存在 parent 语境。
我试过弄乱 parent 和 child 上下文的合并策略。现在它们被配置为默认值 error-policy 并且在保存时不会抛出任何错误。
我这里的主要问题与 cross-thread 核心数据的使用有关。
我原以为 cross-thread 滥用的症状会更明显,但这就是它们对我的表现。确保我从所有线程正确访问托管对象上下文解决了我的问题。
我有一些具有 one-to-many parent-child 关系的 NSManagedObjects,其中 "children" 属性 是一个 NSOrderedSet。
当我创建一个新的 child 时,我是在 child NSManagedObjectContext 中创建的。我在 children 集合的索引 0 处插入 child。
在我保存 child 上下文之前,我观察到 parent 的 children 看起来像:
Parent
- 孩子 1
- Kid2
- Kid3
- Kid4(新)
但是当我继续保存 parent 上下文时,我检查了 "updatedObjects" 属性 并看到 parent 的 children 是有序的错误!
Parent
- 孩子 1
- Kid2
- Kid3
- Kid4(新)
注意: 这只会发生在新创建的 children 上。如果在我创建 child 上下文时 children 已经存在,我可以更改它们在 child 上下文中的顺序,并且它们在有序集中的位置会适当地保存在 parent 语境。
我试过弄乱 parent 和 child 上下文的合并策略。现在它们被配置为默认值 error-policy 并且在保存时不会抛出任何错误。
我这里的主要问题与 cross-thread 核心数据的使用有关。
我原以为 cross-thread 滥用的症状会更明显,但这就是它们对我的表现。确保我从所有线程正确访问托管对象上下文解决了我的问题。