0

tableViewCell 冻结有一些问题。我有一个带有练习列表的表格视图单元格。当我在另一个 viewController 上添加一个新练习时,然后弹回到这个列出所有练习的 tableViewController,相应的单元格被冻结(见屏幕截图)。然后,如果我调用[self.tableCell reloadData],该单元格将永远不会刷新。

这很奇怪,因为如果有问题的单元格是索引 #4,并且我将数据源更改为只有 2 个项目,那么第 4 个单元格仍然被冻结。(前 2 个渲染正确,第 3 个为空白,第 4 个为违规单元格)

所有练习列表:

https://dl.dropbox.com/u/2795448/Screenshots/ot.png

当我更改 tableView 数据源中的数据时,该单元格仍然被冻结:

https://dl.dropbox.com/u/2795448/Screenshots/ou.png

如果我放置一个断点并检查 tableView,它不会说明那个冻结的单元格:

https://dl.dropbox.com/u/2795448/Screenshots/ov.png

不知道从哪里开始 :( 似乎只有当我从不同的 viewController 插入一行然后弹回到这个时才会发生。

有什么想法吗?非常感谢您的帮助!

4

2 回答 2

1

您正在保留对单元格的引用。这是个坏主意。它与数据源的整个模式和表格单元格的回收相矛盾。各种古怪的错误将是不可避免的结果。

相反,您应该确保您的数据源方法返回正确数量的部分和行,以及适当的单元格,然后重新加载您的表格而不是单元格。

[self.tableView reloadData]; 

因此,例如,当视图从添加新项目返回时,请确保您正在使用的数据数组已更新并重新加载。

于 2013-10-07T07:21:51.823 回答
1

我完全不明白您管理表格视图和数据源的方式。如果您对数据源进行任何更改,则相同的更改也应反映在 tableview 中。(两者都应该同步)。您可以使用:

Table reloadRowsAtIndexPaths: Table deleteRowsAtIndexPaths: Table insertRowsAtIndexPaths:

更改您的表格视图及其单元格。或者你可以打电话[Table reloadData]

请记住:永远不要尝试存储引用,UITableViewCells因为它们在屏幕上再次出列 - 您的引用将只是一个垃圾。只需使用上述 3 种方法更改您的单元格,您就可以开始了。如果您想清除某些东西,请提出要求。

于 2013-10-07T07:36:17.083 回答