【问题标题】:Changes value stored in mutable array unexpectedly in objective c在目标 c 中意外更改存储在可变数组中的值
【发布时间】:2015-06-06 11:51:37
【问题描述】:

我有来自 网络服务 的数据要显示。我正在正确获取数据,并且它已显示在tableview 中。我将正在显示/创建的cells 存储在mutable array 中,以便下次在不使用Web 服务的情况下加载它们。第一次数据已经正确存储在数组中,但是存储在数组中的值会自动更改!!!

我确实检查了我要插入单元格的代码部分,它仅根据项目数起作用,即。如果我有 5 个来自服务的数据,它只存储 5 个值并且它只工作 5 次。那它怎么变??

【问题讨论】:

    标签: ios objective-c uitableview nsmutablearray


    【解决方案1】:

    iOS 只创建一次显示的单元格,然后在屏幕滚动一次后重用它们。当您在表格中滚动时,数组中的单元格正在被重复使用,并且来自 Web 服务的新内容正在替换来自 Web 服务的早期响应的内容。

    与其将单元格保存在数组中,不如将 Web 服务中的内容保存在数组或字典或其他适当的集合中,然后更新集合中的单元格。

    【讨论】:

    • 感谢您的快速回复。我仅在从 Web 服务获取完整数据后才尝试将内容加载到 tableview。通常我会按照您指定的方式处理此问题。但是在这里,我在自己的同一个类中调用了 Web 服务 2 次,并且我有要加载的图像。所以我已经处理了视图控制器类中的 2 个服务调用和 tableview 单元类中的图像 url 调用。结果,我不会将加载的图像数据获取到视图控制器类。这就是为什么我要存储整个单元格本身。
    【解决方案2】:

    数据会自动更改,因为您存储的是可重复使用的单元格(如果它们不再出现在屏幕上,可能会在其他地方使用)。不要存储单元格,存储数据对象并使用传递给方法 cellForRowAtIndexPath: 的 indexPath 从数组或字典中加载它们。

    【讨论】:

    • 感谢您的回复。请参考我对 bobnoble 的回答的评论。我已经更清楚地解释了这个场景
    • 我也会将图像存储在数组中,然后将它们传递给单元格。存储细胞绝对不是一种选择。
    猜你喜欢
    • 2021-04-09
    • 2022-01-04
    • 2015-09-24
    • 1970-01-01
    • 2014-07-16
    • 2014-11-04
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多