如何在 swift 中将图像从数组下载到 tableviewcontroller?
How to download images from array to tableviewcontroller in swift?
我有一个 table 视图控制器,其单元格包含 UIImageView。我还有一个包含 url 的 NSMutable 数组。我希望 url 下载图像并按正确的顺序放置它们。 NSMutable数组还包含一些空字符串和它对应的单元格我想从我的图像资产中获取我的占位符图像。
我怎样才能让它工作?我还在每个单元格中填充了标题和摘要,但无法了解图像的工作原理。
更新
用于图片下载的代码。注意 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
谢谢
这个看似无辜的问题实际上包含了很多有趣的细节。其中包括:
- 使用延迟加载图像,及时加载它们,而不是尝试预先下载它们;
- 异步下载图像;
- 在根据需要下载图像时,缓存它们(使用
NSCache
,而不是 NSMutableArray
),这样如果您向后滚动查看一些最近下载的图像,则不必下载它们再次;
- 但是,为了应对内存压力,请确保清空基于 RAM 的缓存(但仍然利用持久存储缓存);
- 如果用户快速向下滚动到 table 示例中的第 100 行,请确保可见单元格的图像不会积压在对前 99 张图像的请求之后(注意:您应该在次优条件下测试您的应用程序,例如较差的 2G 或 3G 蜂窝环境,可以使用网络 link 调节器进行模拟);和
- 您可能希望显示占位符图像,直到异步检索的图像被下载(或从缓存中检索)。
最重要的是,这需要付出不小的努力才能正确完成。因此,我鼓励您使用现有解决方案,例如 SDWebImage or AFNetworking 提供的 UIImageView
类别。这两个框架都为 UIImageView
提供了一个很好的类别,允许您请求异步下载图像(在 SDWebImage 中是 sd_setImageWithURL
;在 AFNetworking 中是 setImageWithURL
)。
我有一个 table 视图控制器,其单元格包含 UIImageView。我还有一个包含 url 的 NSMutable 数组。我希望 url 下载图像并按正确的顺序放置它们。 NSMutable数组还包含一些空字符串和它对应的单元格我想从我的图像资产中获取我的占位符图像。
我怎样才能让它工作?我还在每个单元格中填充了标题和摘要,但无法了解图像的工作原理。
更新
用于图片下载的代码。注意 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
谢谢
这个看似无辜的问题实际上包含了很多有趣的细节。其中包括:
- 使用延迟加载图像,及时加载它们,而不是尝试预先下载它们;
- 异步下载图像;
- 在根据需要下载图像时,缓存它们(使用
NSCache
,而不是NSMutableArray
),这样如果您向后滚动查看一些最近下载的图像,则不必下载它们再次; - 但是,为了应对内存压力,请确保清空基于 RAM 的缓存(但仍然利用持久存储缓存);
- 如果用户快速向下滚动到 table 示例中的第 100 行,请确保可见单元格的图像不会积压在对前 99 张图像的请求之后(注意:您应该在次优条件下测试您的应用程序,例如较差的 2G 或 3G 蜂窝环境,可以使用网络 link 调节器进行模拟);和
- 您可能希望显示占位符图像,直到异步检索的图像被下载(或从缓存中检索)。
最重要的是,这需要付出不小的努力才能正确完成。因此,我鼓励您使用现有解决方案,例如 SDWebImage or AFNetworking 提供的 UIImageView
类别。这两个框架都为 UIImageView
提供了一个很好的类别,允许您请求异步下载图像(在 SDWebImage 中是 sd_setImageWithURL
;在 AFNetworking 中是 setImageWithURL
)。