【问题标题】:How to download images from array to tableviewcontroller in swift?如何快速将图像从数组下载到 tableviewcontroller?
【发布时间】:2015-05-10 00:01:28
【问题描述】:

我有一个表格视图控制器,其中包含一个包含 UIImageView 的单元格。我还有一个包含 url 的 NSMutableArray。我希望 url 下载图像并将它们按正确的顺序放置。 NSMutableArray 还包含一些空字符串和它对应的单元格,我想从我的图像资产中获取占位符图像。

我怎样才能让它工作?我还用标题和摘要填充了每个单元格,但无法确定图像的工作原理。

更新

用于图像下载的代码。请注意 photoLabels 包含图像数组。一旦第一个占位符图像出现(它是一个索引晚),一些照片就在不正确的位置。为什么要这样做。有谁知道为什么。我有 println(photoLabels) 并且所有 50 个字符串都是正确的(有些只是 ""

如果有人可以提供帮助,那就太好了。

let imageURL: String = photoLabels.objectAtIndex(indexPath.row) as String
println(imageURL)
if imageURL == "" {
    cell.imageContainer.image = UIImage(named: "placeholder")
} else {
    cell.imageContainer.setImageWithURL(NSURL(string: imageURL))
}

return cell

谢谢

【问题讨论】:

  • 您是否确认photoLabels 数组中的索引与保存其他信息的其他数组中的索引完全匹配?顺便说一句,拥有一系列单独的数组会让您发现这些断开连接...
  • 感谢您指出这一点!在查看了我得到的 json 响应和实际的网站之后,它们是不同的。我仍然不确定为什么会这样,但我重新创建了 api,到目前为止一切似乎都在工作。感谢您的所有帮助和时间。 :)
  • PS 我正在做的下载图像的最佳做法是什么?根据我的阅读,以这种方式下载它们似乎没问题。对吗?
  • 是的,使用那些 UIImageView 类别是一个不错的选择,恕我直言。它可以让你到达那里的 90%。当然,您总是可以考虑进一步改进(例如,如果图像是高分辨率的,也许调整它们的大小以适合表格中的缩略图表示;也许预取图像等)。但是除非您有功能要求,否则您可能不应该担心这些方法。正如他们所说,“过早的优化是万恶之源。”

标签: arrays xcode image swift nsmutablearray


【解决方案1】:

这个看似天真的问题实际上包含了许多有趣的细节。其中包括:

  • 使用延迟加载图像,即时加载它们,而不是尝试预先下载它们;
  • 异步下载图片;
  • 根据需要下载图像时,缓存它们(使用NSCache,而不是NSMutableArray),这样如果您向后滚动查看最近下载的一些图像,您就不必再次下载它们;
  • 但是,为了应对内存压力,请确保清空基于 RAM 的缓存(但仍要利用持久存储缓存);
  • 如果用户快速向下滚动到表格示例中的第 100 行,请确保可见单元格的图像不会积压在对前 99 个图像的请求之后(注意:您应该在次优条件下测试您的应用,例如较差的 2G 或 3G 蜂窝环境,可以使用网络链路调节器进行模拟);和
  • 您可能希望在异步检索的图像下载(或从缓存中检索)之前显示占位符图像。

最重要的是,这需要付出不小的努力才能正确完成。因此,我鼓励您使用现有的解决方案,例如SDWebImageAFNetworking 提供的UIImageView 类别。这两个框架都为UIImageView 提供了一个不错的类别,允许您请求异步下载图像(在SDWebImage 中为sd_setImageWithURL;在AFNetworking 中为setImageWithURL)。

【讨论】:

  • 是的,我已经这样做了,但是当将图像放入表中时,一旦有一些字符串为空,它就会不按顺序排列。我使用了 AFNetworking,一切正常,但将图像按正确的顺序排列。需要明确的是,图像通常按正确的顺序排列,但有时它们会乱序 1 或 2 个空格。我认为这可能与应该有我的占位符的空字符串有关。抱歉不清楚。任何建议
  • 我的建议是您使用代码示例编辑您的问题。我们如何在不查看您所做的工作的情况下就如何修复您的代码示例向您提供建议?如果您使用 AFNetworking UIImageView+AFNetworking 类别,我很难想象图像会如何关闭。您还必须确认问题出在您的网络代码中,还是在您的模型对象中存在错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多