我的 UITableView 有一个相当复杂的数据源。我非常小心地将它与 tableview 本身保持同步,每当某些数据发生变化时手动插入和删除行/部分(带有动画),反之亦然。
我很难 100% 有信心保持这些匹配。 View 和数据之间不匹配的影响可能很严重 - 例如,选择一行并尝试对关联的对象执行某些操作,当该对象不存在时,将导致崩溃。许多其他错误会导致不太明显的错误(例如,对错误的对象进行操作)。
我在想如果我在每次数据更改后调用 reloadData 而不是手动修改 View ,所有这些都会消失。但是那样我会失去动画。
所以也许我可以在动画结束后以某种方式调用 reloadData ,作为安全措施。
- 这听起来是个好主意吗?有其他选择吗?
- 我应该在哪里进行此调用,以便仅在动画之后发生重新加载(如果一切正常,用户将不可见)?
- 为了调试目的,我可以做些什么来比较 reloadData 前后的 View ,以确定屏幕上是否有任何变化并发出警告?我希望这仅适用于 View 中的行,因为屏幕外内容仅在需要时才出队。
对你的想法感兴趣!
Best Answer-推荐答案 strong>
我感觉到你的痛苦。不幸的是,我认为重新加载的想法没有多大帮助。如果模型和表格 View 之间存在差异,根据我的经验,该问题表现为更新动画之前或期间的异常。如果有问题,我发现您无法重新加载,而且我认为您不想这样做。
根据我的经验,这些是导致模型容易与表格 View 不同步的一些风险因素:
- 模型计数和模型项来自更复杂的计算
比简单的数组计数和数组 itemAtIndex:
- 过滤器,例如在同一表格中显示模型不同方面的选项卡,具体取决于选择的选项卡
- 搜索结果 Controller 和它的tableView
- 基于异步触发的事件进行更新
- 模型中的异质类型,具有不同的细胞类型和大小
- 一个笨拙的词:FetchedResultsController
- 尤其是上述的组合
这有点超出了表格 View 的范围,而且,我并不声称自己是这里所有讲道的完美实践者,但我认为让您的应用充满信心的方法包括以下几点:
在没有美术和应用逻辑的情况下构建 UI;只是一个
模型的模拟版本 - 在可能的范围内 - 等于
复杂性,但不是数量,真实的东西。
在一定程度上构建模型和应用逻辑,以及测试
可能 - 独立于 UI 进行操作。
在您进行测试时,将异常视为您的 friend ,告诉您您需要修复。 尽可能长时间地插入尽可能少的防御性代码。
我的 0.02 美元。祝你好运。
关于iphone - 在 UITableView 上使用 reloadData 作为保险单,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/9961736/
|