我在猜测我们应该倾向于使用不可变数组作为UITableView
使用的数据模型阵列。关于这一点的读物在互联网上是非常不同的。我会说,这可以防止在tableview显示数据时修改数组。例如,如果发生上述情况,numberOfRowsInSection:
方法可能会产生问题,对(即使我知道它在理论上是可行的,我仍然无法真正想到情况如何在真实世界中发生这种情况)?更新UITableView使用的数据模型阵列的正确方法
现在,在commitEditingStyle:forRowAtIndexPath:
方法,我这样做(messagesArray是可变的):
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
Message *message = messageArray[indexPath.row];
[messagesArray removeObject:message];
[self.messageTable deleteRowsAtIndexPaths:[NSArray arrayWithObject: indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
,而不是(有messagesArray
不可改变的)
NSMutableArray *temp = [NSMutableArray arrayWithArray:messagesArray];
[temp removeObject:message];
messagesArray = [NSArray arrayWithArray:temp];
后者的代码是什么,我不得不如果messageArray
是不可变的。
现在我有两个问题......国际海事组织(纠正我,如果我错了),在上面的方法从两个方面从数组中删除对象具有相同的效果。消息数组最后删除了一个元素。就是这样......但是像后一个例子那样做,可以让我拥有不可变的数据模型数组。
有人可以评论什么实际上是一个首选的方式(或我可以说正确的方式?)以更新数据模型数组后删除?
它实际上已经是私人了......我更担心在哪些情况下可能会发生一些混乱,如果我保持它可变...... – Whirlwind
如果更改数组,无论可变性如何,表视图必须用它来更新,否则你会看到不好的数据并可能崩溃(例如,当你滚动到结尾时索引超出界限的错误) – beyerss