核心数据对多关系导致获取的结果控制器崩溃

Core Data to-many relationship causing fetched results controller to crash

我有一个问题模型对象,它与对该问题的尝试有很多关系。

我正在使用 Fetched Results Controller 列出问题。当我在 table 视图中点击一个问题时,它会加载包含该问题的详细视图。

提交答案后,我想将另一次尝试附加到问题对象,这样我就有了尝试的历史记录。

这就是事情变得奇怪的地方。提交答案时屏幕上没有 table 视图,但此时我定义了尝试和问题之间的关系(即 attempt.question = currentQuestion),它导致底层获取结果控制器崩溃。

它似乎调用了 frc 委托方法 controller:didChangeContent:atIndexPath:forChangeType:newIndexPath: 两次,第一次用于更新(这是有道理的,因为问题对象已更改),第二次用于插入(没有有意义,因为没有问题对象被删除或插入)。

获取结果控制器的获取请求仅查询问题对象,并且对该问题的尝试不感兴趣。

无论尝试是有序还是无序的对多关系,都会发生这种情况,并且只发生在设备上,而不发生在模拟器上。

如果能帮我弄清楚为什么会这样,我将不胜感激。

感谢 Martin R,他将我指向

出于某种原因,即使在我的例子中它是一个 .Insert 事件而不是链接问题中的 .Move 事件,对委托的调用仍然填充了 newIndexPath 参数与 atIndexPath 参数相同的索引路径。

在允许 table 视图插入行之前对这两个参数执行不等式检查可以解决问题,因为这两个对象是相同的:

(lldb) po indexPath
▿ Optional(<NSIndexPath: 0xc000000000008016> {length = 2, path = 0 - 1})

(lldb) po newIndexPath
▿ Optional(<NSIndexPath: 0xc000000000008016> {length = 2, path = 0 - 1})