无效更新:执行 TableView.reloadData() 时无效的节数

Invalid update: invalid number of sections when doing TableView.reloadData()

我得到异常:

无效更新:无效的节数。 table 视图中更新后(2)包含的节数必须等于更新前table 视图中包含的节数(1),加上或减去节数插入或删除(插入 1 个,删除 1 个)。

这就是我的节数功能的样子。

func numberOfSections(in tavleView: UITableView) -> Int {
    let someArray = someFunctionToRetrieveArrayFromUserDefaults()
    return someArray.count 
}

该数组是从 UserDefaults 中检索到的解码数组。每次添加新值时都会将编码数组写入 UserDefaults,因此它始终是最新的。

任何人都可以帮助澄清异常和我做错了什么吗?

如前所述,插入 (1) + 删除 (1) 的数量为 1 - 1 = 0,而您返回的值为 2(someArray.count 为 2)。你用过 peformBatch 吗? insert/delete 行?

为什么会这样?从您提供的非常短的代码示例中很难知道,我假设您的数组不是线程安全的(您已经提到从 UserDefaults 解码),因此在调用 numberOfSections 时,数据尚未同步。

尝试制作一个不访问 UserDefaults 的更简单的 someArray,并使您的代码 运行 不会崩溃。