问题现象
在复杂布局的 SwiftUI 视图中,用段(Section)来搭配组合其它容器视图(Form 或 List)无疑极具默契性。不过,在多个 Section 对应的数据被后台多线程修改时,往往会发生难以定位的错误,甚至导致 App 直接崩溃:
如上图所示,我们试图在后台线程更新多个 Section 中的内容时,发生了“诡异”的错误:
Thread 1: “request for index path for global index 2 when there are only 2 items in the collection view”
注意,因为该错误直接中断在顶层 App 结构,而不是引发该错误具体的某一行上,所以很难定位到实际导致错误的代码上去。
在本篇博文中,我们将用两种方法来解决这个问题,并比较它们的优劣。
要说明的是,该代码只在 iOS 16 中出错,而在之前的 iOS 15 中则一切正常,这也是 iOS 16 系统内部组件自查越发严格的表现。
废话少叙,让我们马上开始修复之旅吧!
Let’s go!!! 😉