• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iphone - 在 UITableView 上使用 reloadData 作为保险单

[复制链接]
菜鸟教程小白 发表于 2022-12-13 12:39:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的 UITableView 有一个相当复杂的数据源。我非常小心地将它与 tableview 本身保持同步,每当某些数据发生变化时手动插入和删除行/部分(带有动画),反之亦然。

我很难 100% 有信心保持这些匹配。 View 和数据之间不匹配的影响可能很严重 - 例如,选择一行并尝试对关联的对象执行某些操作,当该对象不存在时,将导致崩溃。许多其他错误会导致不太明显的错误(例如,对错误的对象进行操作)。

我在想如果我在每次数据更改后调用 reloadData 而不是手动修改 View ,所有这些都会消失。但是那样我会失去动画。

所以也许我可以在动画结束后以某种方式调用 reloadData ,作为安全措施。

  • 这听起来是个好主意吗?有其他选择吗?
  • 我应该在哪里进行此调用,以便仅在动画之后发生重新加载(如果一切正常,用户将不可见)?
  • 为了调试目的,我可以做些什么来比较 reloadData 前后的 View ,以确定屏幕上是否有任何变化并发出警告?我希望这仅适用于 View 中的行,因为屏幕外内容仅在需要时才出队。

对你的想法感兴趣!



Best Answer-推荐答案


我感觉到你的痛苦。不幸的是,我认为重新加载的想法没有多大帮助。如果模型和表格 View 之间存在差异,根据我的经验,该问题表现为更新动画之前或期间的异常。如果有问题,我发现您无法重新加载,而且我认为您不想这样做。

根据我的经验,这些是导致模型容易与表格 View 不同步的一些风险因素:

  • 模型计数和模型项来自更复杂的计算 比简单的数组计数和数组 itemAtIndex:
  • 过滤器,例如在同一表格中显示模型不同方面的选项卡,具体取决于选择的选项卡
  • 搜索结果 Controller 和它的tableView
  • 基于异步触发的事件进行更新
  • 模型中的异质类型,具有不同的细胞类型和大小
  • 一个笨拙的词:FetchedResultsController
  • 尤其是上述的组合

这有点超出了表格 View 的范围,而且,我并不声称自己是这里所有讲道的完美实践者,但我认为让您的应用充满信心的方法包括以下几点:

  1. 在没有美术和应用逻辑的情况下构建 UI;只是一个 模型的模拟版本 - 在可能的范围内 - 等于 复杂性,但不是数量,真实的东西。

  2. 在一定程度上构建模型和应用逻辑,以及测试 可能 - 独立于 UI 进行操作。

  3. 在您进行测试时,将异常视为您的 friend ,告诉您您需要修复。 尽可能长时间地插入尽可能少的防御性代码

我的 0.02 美元。祝你好运。

关于iphone - 在 UITableView 上使用 reloadData 作为保险单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9961736/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap