如何正确修改 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 插入和删除行时如何正确更新数据源?