我搜索了一吨,并没有找到似乎解决我遇到的问题的答案。不寻常的UITableView崩溃 - [__ NSArrayM objectAtIndex:]:索引0超出空阵列的边界
我有一个UITableViewController。在viewDidLoad方法中,我从数据库加载对象,然后调用reloadData。
现在一般这工作正常。但是,现在我正在执行排序,这是持久的,以便在下次应用程序启动时使用相同的排序算法。请注意,在所有情况下,排序后支持该部分的数组大小相同。
如果我使用默认排序方法,即使它通过相同的排序>调用委托> reloadTable代码路径运行,我也不会崩溃。但是,如果我使用替代的排序方法,它使用相同的代码路径,我会看到表视图询问行数,并获取正确的编号,但是我得到此异常。只有对象按不同的顺序排序,所以这对我来说没有意义。
另外值得注意的是,如果我排序表后显示的对象(它使用相同的代码路径),它工作正常。
这对我来说没有意义,几乎看起来像一个UITableView错误,但我希望这是我能解决的问题。
我的应用程序是开源的,这样我就可以直接链接到相关的文件:
https://github.com/einsteinx2/iSub/blob/weird_crash/Classes/UI/Reusable/ItemViewController.swift https://github.com/einsteinx2/iSub/blob/weird_crash/Classes/UI/Reusable/ItemViewModel.swift
最相关的方法是ItemViewModel.sortAll()
和ItemViewController.itemsChanged(viewModel: ItemViewModel)
我已经江郎才尽关于如何调试这个。这没有意义。
一些试验和错误的事情,我已经试过:
- 的延迟之后只使用一个表款
- 调用reloadData排除某种竞争条件
- 不调用reloadData在我itemsChanged委托方法(仍然崩溃,因为reloadData似乎被表视图控制器自动调用)
似乎没有什么区别。我完全困惑这是怎么可能的。如果有人对我如何继续调试这个问题有任何想法,或者有可能的话,我会全神贯注。谢谢。
编辑:为了使事情更令人困惑,我也类似地坚持排序相册,使用相同的ItemViewController,但返回到以前排序的专辑不会导致崩溃,即使它应该做的完全相同并且运行相同的代码路径。
您在项目中遵循什么架构? :? –
如果我能正确理解你的问题,那是MVVM,但没有绑定。 –