如何正确修改 UITableView 数据源数组

Posted

技术标签:

【中文标题】如何正确修改 UITableView 数据源数组【英文标题】:How to Modify UITableView Data Source Array Properly 【发布时间】:2014-06-14 23:30:09 【问题描述】:

假设我想删除行或向表中添加行。我修改数据源并让表进行更新或使用 UITableView 的 insertRowsAtIndexPaths:withAnimation: 和 deleteRowsAtIndexPaths:withAnimation: 选择器是否更聪明?每当我尝试修改实际数据源数组时,它的大小也用于在数据源的 tableView:numberOfCellsInSection: 协议方法中确定,我会抛出一个错误,指出该表之前每个部分必须具有相同数量的单元格,并且表更新后。数据源数组本身是一个 NSMutableArray;当我使用 deleteRowsAtIndexPaths 和 insertRowsAtIndexPaths 选择器时,这个数组会自动更新吗?我会假设不会。但是如何在更新数据源数组的同时添加或删除行?

【问题讨论】:

NSMutableArray 的行为与自动释放或复制无关。但如果您不确定,您可以随时查看the docs:为了填补空白,所有超出索引的元素都会通过从索引中减去 1 来移动。 @Caleb 坦率地说,我将其发布为一个问题,因为在一般的 *** 或谷歌搜索中没有出现像样的文档。我发现每次遇到程序问题时都采用“自己尝试”的方法效率很低。事实上,当我停下来继续做其他事情时,我很快就得到了答案 @Savagewood 根据 Caleb 的链接,在这种情况下,答案在 Apple 的官方文档中明确给出,可直接在 Xcode 中获得。 感谢@Tommy 我的愚蠢没有那么容易找到。至于复制和原子属性,它们确实会在检索期间影响属性的状态,即在使用多线程时将它们设置为不同的值。我修改了我的问题,使其更具体地针对我试图解决的确切问题。 【参考方案1】:

是的。

NSMutableArray* array = @["a", "b", "c"]

NSLog(@"%@", array[1])
// prints "b"

[array removeObjectAtIndex:1] 
// ["a", "c"]

NSLog(@"%@", array[1])
// now prints "c".

【讨论】:

我将我的问题编辑得更具体。介意再看一下吗?

以上是关于如何正确修改 UITableView 数据源数组的主要内容,如果未能解决你的问题,请参考以下文章

更新 UITableView 使用的数据模型数组的正确方法 [关闭]

UITableView / UISearchBar 返回不正确的结果

UITableView 在滚动/分页时无法正确处理 contentOffset

从 UITableView 插入和删除行时如何正确更新数据源?

UITableView 没有在 Swift 3 中使用 Index 正确显示数据

如何在 UITableview 单元格中正确显示 JSON 数据?