ios - 更新 UITableView 使用的数据模型数组的正确方法

标签 ios objective-c arrays uitableview nsmutablearray

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

4年前关闭。




Improve this question




我猜我们应该倾向于对 UITableView 使用的数据模型数组使用不可变数组。 .关于这方面的阅读在互联网上是非常不同的。我想说这可以防止在 tableview 显示数据时修改数组。例如,numberOfRowsInSection:如果发生上述情况,方法可能会出现问题,对吧(即使我知道理论上可行,我仍然无法真正想到在现实世界中如何发生这种情况)?

现在,在 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是不可变的。

现在我有两个问题...... IMO(如果我错了,请纠正我),在上述方法中以两种方式从数组中删除一个对象具有相同的效果。 messagesArray 最终删除了一个元素。就是这样......但是像在后一个示例中那样做的事情,允许我拥有不可变的数据模型数组。

有人可以评论在删除单元格后更新数据模型数组的实际首选方式(或者我可以说正确的方式?)吗?

最佳答案

我希望有一个可变数组,但将其设为私有(private)。然后,如果另一个类需要更改数组,您可以提供 add()方法和 delete()方法。两者都将负责更新数组和 TableView 。

关于ios - 更新 UITableView 使用的数据模型数组的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44179607/

相关文章:

iOS - 当全局计算发生时 UIViewControllers

ios - UIAlertController 操作表中的 UIPickerView 未显示任何数据

objective-c - Objective-C 中的正则表达式语法

php - jQuery 自动完成从 mysql 数据库获取提要

iphone - iPad 目录应用程序

objective-c - 发布 UIAlertView 时的奇怪编码模式

iphone - IOS [NSURL initFileURLWithPath :]: nil string parameter on loading video

javascript - 在 Javascript 中比较循环中的日期数组

javascript - 比较 2 个数组并分配匹配的值

ios - 使用搜索在 App 内启动 iTunes Store