自定义的UITableView给出NSInternalInconsistencyException

时间:2019-06-26 11:40:05

标签: swift uitableview tableview

我正在填充UITableView,但遇到一个奇怪的错误,我无法理解。我知道,如果您不对该项目有更多的了解,那么您将无法解决此问题,但是任何人都知道此错误消息的含义以及可能导致此错误的原因。

2019-06-26 13:35:22.383456+0200 TapetDemo[97178:2284706] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempted to access the table view's visibleCells while they were in the process of being updated, which is not allowed. Table view: <UITableView: 0x7fb4f981f000; frame = (0 85; 375 812); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x600003b30570>; layer = <CALayer: 0x6000035e5640>; contentOffset: {0, 0}; contentSize: {375, 44}; adjustedContentInset: {0, 0, 0, 0}; dataSource: <_UIFilteredDataSource: 0x600003b30660>>'
´´´

4 个答案:

答案 0 :(得分:0)

这就是你的错误所说的 'Attempted to access the table view's visibleCells while they were in the process of being updated, which is not allowed.

如果没有实际的代码,几乎不可能知道问题所在,但要确保您没有按照错误的意思去做。

答案 1 :(得分:0)

当我在Firebase UI中使用Collection View时,也遇到了这样的异常。其中有多个委托,例如array(_ array: FUIIndexArray, didChange ref: DatabaseReference, at index: UInt)didAdddidRemove。在这样的自定义Collection视图中,上述代表自动执行集合视图重新加载的任务。如果那时我手动尝试在这些函数中执行reloadData(),则我会遇到这种不一致的情况。

在查看了哪些代码信息后,您很难找到问题所在,但上述情况可能会对您有所帮助。

答案 2 :(得分:0)

这是因为您将要使用一个特定的单元格,然后才能准备好使用该单元格(如错误消息所述)。作为解决方案,您可以将特定的单元格/表视图与另一个委托方法一起使用。此外,当使用带有隐藏内容的表格视图并在滚动时显示这些内容时,您将面临此类问题。作为此问题的解决方案,您可以使用 func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { }委托方法或根据要求的其他委托方法。

答案 3 :(得分:0)

我有一次收到相同的消息,试图更新单元格中的图像。 我不小心用了:

let cell = tableView.cellForRow(at: <IndexPath>) as? <YOUR_TABLE_VIEW_CELL>
cell?.imageView.image = image

而不是出队:

 let cell = tableView.dequeueReusableCell(for: <IndexPath>) as? <YOUR_TABLE_VIEW_CELL>
 cell?.imageView.image = image

希望这对将来遇到此问题的其他人有所帮助。