【发布时间】:2021-07-05 05:14:15
【问题描述】:
我正在编写一个 iOS 应用程序(iOs 14.4.2、Xcode 12.5.1、Realm 5.2.0)。
我使用的其中一个表包含从“结果”数组生成的单元格。该应用程序可以正常加载并使用正确数量的单元格、正确的信息等正确填充表格。
当我从表格中删除一个单元格时(使用 UISwipeActionsConfiguration)会出现问题。当我在操作前后打印出结果数组中的对象数量时,数量会按预期减少。 (例如,如果我从 39 个项目开始,它会减少到 38 个)。只要桌子底部不在视线范围内,一切都很好。但是,当我滚动到表格末尾时,一旦在 UI 中呈现最后一个单元格,应用程序就会崩溃并出现“RLM 异常:索引超出范围”错误。堆栈跟踪显示错误是从“cellForRowAt 方法”引发的。奇怪的是,领域说结果数组应该比结果数组中显示的对象数少 1。
有人知道为什么会这样吗?我错过了一些非常基本的东西吗?
示例 1:
- 加载包含 40 个项目的表格。 (结果数组显示 40 个对象)。最后一行尚不可见,应用正常运行。
- 滑动以删除索引 10 处的项目。(结果数组显示 39 个对象)最后一行尚不可见,应用程序正常运行。
- 向下滚动到表格末尾。应用程序崩溃。错误信息:
Terminating app due to uncaught exception 'RLMException', reason: 'Index 38 is out of bounds (must be less than 38).
示例 2:
- 加载包含 10 个项目的表格。 (结果数组显示 10 个对象)最后一行可见且应用正常运行。
- 滑动以删除索引 2 处的项目。(结果数组显示 9 个对象)
- 应用程序崩溃。错误信息:
Terminating app due to uncaught exception 'RLMException', reason: 'Index 8 is out of bounds (must be less than 8).
2 个问题:
- 为什么说最终对象的索引超出范围,而它还显示更新的数组包含确切数量的对象?
- 为什么它说索引必须小于更新数组中的对象数?
- 最重要的是 - 有人知道问题可能是什么吗?
我在 UI 中同时运行多个表,并根据不同的参数以不同的顺序显示相同的信息,但基于此线程 (https://github.com/realm/realm-cocoa/issues/4499),这应该不是问题。 (我什至尝试隐藏其他表,只显示一个表,但结果是一样的)。
任何帮助将不胜感激!
回溯的照片,如果有帮助的话:
【问题讨论】:
-
能分享一下WorkingVC tableview代码的代码吗?我认为您在滑动时删除了错误的数组数据。
-
几件事;领域结果对象不是数组。它们具有相似的接口,但行为却大不相同。结果始终反映数据的当前状态。例如,如果您在 Results 中有 10 个任务,并且您使用 Realm Studio 删除了一个 Task,那么您的应用程序中的 Results 将有 9 个对象。真的有点神奇。基于此,根据您实现代码的方式以及删除对象的方式,将确定该问题的答案。你用结果来支持你的表吗?还是一个数组?你是否使用观察者来根据 Realm 事件更新你的 UI?
标签: ios swift xcode realm tableview