iOS UITableView reloadData 只更新我添加的最后一个条目,如何重新加载所有内容?
Posted
技术标签:
【中文标题】iOS UITableView reloadData 只更新我添加的最后一个条目,如何重新加载所有内容?【英文标题】:iOS UITableView reloadData only updates the last entry I added, how do I reload everything? 【发布时间】:2014-12-11 16:00:52 【问题描述】:实际问题是我得到的数据来自 NSSet,当我更改集合时,由于它是无序的,最终条目并不总是相同或我添加到集合中的最后一个对象。因此,当我调用 reloadData 时(并且使用断点,我可以告诉它只是更新/添加表中的最后一个单元格,因为行数增加了 1)它经常会发现错误的条目添加到新单元格中,而我最终出现重复,并且我的新对象没有出现在表格中。
这是 reloadData 的正确行为吗?如果是这样,我应该使用什么来确保所有数据都出现?我应该删除所有行并重新开始,还是有办法只更新已经存在的行的属性?
编辑:我想我不清楚,在将数据提供给 tableView 之前,我将其转换为数组,但由于集合的性质,数组的顺序永远不会相同。有人建议我订购数组,但即使我这样做了,如果它不是订单中的最后一项,新项目也不会出现。
【问题讨论】:
屏幕上一次可以看到多少个单元格? 你基本上自己回答了这个问题。集合不能用作数据源,因为它是无序的。通过排序将您的集合转换为有序集合。 我在将其提供给 tableView 之前将其转换为数组,但我想您是正确的,如果我订购了数组,它可能会解决问题。但是,这是 reloadData 的正确行为吗?因为即使我订购了数组,如果新项目落在订单的中间,它仍然不会显示,因为 reloadData 只是更新最后一个项目。 你的断点在cellForRowAtIndexPath
吗? ReloadData 将仅对可见的单元格触发该方法。因此我上面的问题是:如果你只有一个可见的单元格,它只会被调用一次。
哦,对不起,是的,我的断点在那个方法中,但是,一次大约有 10 个项目可见,无论是 5 个项目、10 个项目还是 20 个项目,都会看到相同的行为表。
【参考方案1】:
您不应使用NSSet
来提供UITableView
。由于NSSet
未按索引排序,因此UITableView
将无法正常运行。尝试切换到具有对象索引的NSArray
。
【讨论】:
以上是关于iOS UITableView reloadData 只更新我添加的最后一个条目,如何重新加载所有内容?的主要内容,如果未能解决你的问题,请参考以下文章