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 只更新我添加的最后一个条目,如何重新加载所有内容?的主要内容,如果未能解决你的问题,请参考以下文章

iOS小技能:1. 什么是UITableView? 2. UITableView如何展示数据

iOS开发之UITableView的使用

iOS开发UI篇—UITableview控件简单介绍

iOS横竖滚动UITableView

iOS-UITableView重用机制

iOS基础——通过案例学知识之UITableView(上)