ios - 将新的核心数据对象插入到多个 NSOrderedSet 会忽略索引
问题描述
将新的核心数据实体 (EntityB) 插入另一个实体 (EntityA) 的 NSOrderedSet 关系属性时,我遇到了一种奇怪的行为;被index
忽略并且对象总是被插入到有序集的末尾。
插入的对象是现有对象的副本,使用使用自定义副本初始化程序创建的不同父实体:
// EntityA
@NSManaged var entityBs: NSOrderedSet // to-many relationship
// EntityB
@NSManaged var entityA: EntityA?
// Inserting EntityB copy into EntityA
let entityBCopy = EntityB(entityB: entityBOriginal, newParent: entityA)
entityA.insertIntoEntityBs(entityBCopy, at: index)
entityBs
在插入之前:
entity0
entity1
entity2
entity3
entity4
entityBs
newEntity2
在索引 2 处插入后:
entity0
entity1
entity2
entity3
entity4
newEntity2 < inserted at the end of ordered set, not at index 2
我已经确认这在' 内容index
的范围内。entityBs
EntityA 使用 Core Data Generated Accessors,但我也尝试通过键值编码方法手动插入对象 - 发生同样的问题。这让我想知道这是否是 NSOrderedSet 上的问题,而不是核心数据问题。
我不知道为什么会这样,所以欢迎任何信息!
解决方案
问题在于 的初始化entityBCopy
,特别是newParent
参数。使用父关系初始化EntityB
,然后立即将EntityB
实例插入同一个父关系是多余的。假设模型中的所有内容都正确设置,Core Data 生成的insert
方法应该处理设置 parent 属性。entityBCopy
因此,newParent
从初始化程序中删除参数应该会导致在正确的索引处插入:
// Inserting EntityB copy into EntityA
let entityBCopy = EntityB(entityB: entityBOriginal)
entityA.insertIntoEntityBs(entityBCopy, at: index)
快乐编码!
推荐阅读
- jquery - jQuery datepicker 中按钮的位置
- blogger - 如何为 Google Blogger 添加“相关帖子”小部件
- javascript - 从函数中检索值返回未定义
- c# - 如何在将记录插入数据库c#后立即在组合框中显示主键?
- websphere - 使用 check_was Nagios 插件监控 WebSphere 门户线程池时出错
- spring - @Valid 注释适用于 @RequestBody 但不适用于 RequestEntity
- asp.net - 文本的经典asp加密
- laravel - 如何在phpunit laravel中通过嘲笑传递函数使用查询构建器
- javascript - 第二次调用 ng-keyup 时无法访问它
- java - 如何将 Map Reduce 程序与 Web 应用程序集成