菜鸟教程小白 发表于 2022-12-13 12:39:45

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


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

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

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

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

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

<p>对你的想法感兴趣!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我感觉到你的痛苦。不幸的是,我认为重新加载的想法没有多大帮助。如果模型和表格 View 之间存在差异,根据我的经验,该问题表现为<em>更新动画之前或期间</em>的异常。如果有问题,我发现您无法重新加载,而且我认为您不想这样做。</p>

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

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

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

<ol>
<li><p>在没有美术和应用逻辑的情况下构建 UI;只是一个
模型的模拟版本 - 在可能的范围内 - 等于
复杂性,但不是数量,真实的东西。</p></li>
<li><p>在一定程度上构建模型和应用逻辑,以及测试
可能 - 独立于 UI 进行操作。</p></li>
<li><p>在您进行测试时,将异常视为您的 friend ,告诉您您需要修复。 <em>尽可能长时间地插入尽可能少的防御性代码</em>。</p></li>
</ol>

<p>我的 0.02 美元。祝你好运。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 在 UITableView 上使用 reloadData 作为保险单,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9961736/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9961736/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 在 UITableView 上使用 reloadData 作为保险单