我搜索了一噸,並沒有找到似乎解決我遇到的問題的答案。不尋常的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,但沒有綁定。 –