我的UITableView有一个相当复杂的数据源。我非常小心地将它与tableview本身同步,每当某些数据发生变化时手动插入和删除行/部分(带动画),反之亦然。
很难对我保持这些匹配的能力100%有信心。视图和数据之间不匹配的影响可能非常严重 - 例如,选择一行并尝试对关联对象执行某些操作(当该对象不存在时)将导致崩溃。许多其他错误会导致不太明显的错误(例如,对错误的对象进行操作)。
如果我在每次数据更改后调用reloadData而不是手动修改视图,我就会考虑如何消除这一切。但后来我会失去动画。
所以也许我可以在我的动画结束后以某种方式调用reloadData 作为安全措施。
对你的想法感兴趣!
答案 0 :(得分:3)
我感觉到你的痛苦。不幸的是,我不认为重新加载的想法有多大帮助。如果模型和表视图之间存在差异,根据我的经验,问题在更新动画之前或期间显示为异常。如果有问题,我发现你没有进行重装,我认为你不想这样做。
根据我的经验,这些是一些风险因素导致模型容易与表格视图不同步:
这远远超出了表格视图,并且,我并不认为这是所有讲道的完美实践者,但我认为让您对应用程序充满信心的方式包括以下内容:
构建没有艺术的UI,尽可能少的app逻辑;只是一个 模型的模拟版本 - 尽可能 - 等于 真实的东西,复杂但不是数量。
在一定程度上构建模型和应用程序逻辑以及测试 可能 - 独立于UI运用它。
在您进行测试时,请将异常视为您的朋友,告诉您需要修复。 尽可能长时间插入尽可能少的防御性代码。
我的0.02美元。祝你好运。
答案 1 :(得分:0)
您可以在插入/删除行动画的任何位置添加此行代码。
[self performSelector:@selector(reloadTheTable) withObject:nil afterDelay:0.3];
-(void) reloadTheTable {
[tableView reloadData];
}
然而,如果有更多的时间,我认为你可以弄清楚如何删除添加没有错误的行,然后不需要额外的reloadData,但你的表可能比我使用的更复杂。