有一些tableViewCell冻结的问题。我有一个表格视图单元格,其中包含一系列练习。当我在另一个viewController上添加一个新练习时,然后回到这个列出所有练习的tableViewController,相应的单元格被冻结(见截图)。然后,如果我调用[self.tableCell reloadData]
,那个单元格永远不会刷新。
这很奇怪,因为如果违规单元格是索引#4,并且我将数据源更改为只有2个项目,则第4个单元格仍然处于冻结状态。 (前2个渲染正确,第3个是空白,第4个是违规单元格)
所有练习列表:
当我更改tableView数据源中的数据时,该单元格仍然被冻结:
如果我放置一个断点并检查tableView,它没有说明该冻结的单元格:
不知道从哪里开始:(似乎只有当我从另一个viewController插入一行然后弹回到这一行时才会发生。
有什么想法?非常感谢所以以获得任何帮助!
答案 0 :(得分:1)
您正在保留对单元格的引用。这是个坏主意。它与表格单元的数据源和回收的整个模式相矛盾。各种古怪的错误将是不可避免的结果。
相反,您应确保数据源方法返回正确数量的部分和行以及相应的单元格,然后重新加载表格而不是单元格。
[self.tableView reloadData];
因此,例如,当视图从添加新项目返回时,请确保您正在使用的数据阵列已更新并重新加载。
答案 1 :(得分:1)
我完全不理解你管理tableview和数据源的方式。如果您对数据源进行任何更改,则同样的更改也应反映在tableview中。 (两者都应该同步)。您可以使用:
Table reloadRowsAtIndexPaths:
Table deleteRowsAtIndexPaths:
Table insertRowsAtIndexPaths:
更改您的tableview及其单元格。或者您可以致电[Table reloadData]
请记住:永远不要试图存储UITableViewCells
的引用,因为它们会在屏幕上再次出现 - 您的引用将只是一个垃圾。只需使用上述3种方法改变细胞,就可以了。如果你想要清除某些东西,只需要它。