【问题标题】:Error Domain=NSCocoaErrorDomain Code=256 "The file “images” couldn’t be opened." UserInfo={NSURL=http://错误域 = NSCocoaErrorDomain 代码 = 256 “无法打开文件“图像”。”用户信息={NSURL=http://
【发布时间】:2017-05-09 05:58:29
【问题描述】:
func loadCell(personObj:Person){
    self.lblTitle.text = personObj.title
    self.lblDesc.text = personObj.desc
    print("ImgUrlInCell:", personObj.imageUrl)
    do {
        self.imgPicture.image = try UIImage(data:NSData(contentsOf:NSURL(string: personObj.imageUrl) as! URL) as Data)
    } catch {
        print("Error:",error)
    }
}

首先,我从 API 解析数据并将其放入对象中,然后将其插入数据库。在显示数据时,我从数据库中获取它们并在 Tableview 中列出它们。 如果有互联网连接一切正常 如果没有网络连接图片 url 不起作用,它会打印 6 次错误。 (我在数据库或 API 中有 10 张图片) 另外,ImgUrlInCell 中的控制台中显示了 10 个图像 url: 请有人帮我解决这个问题。我冤枉了什么。

【问题讨论】:

  • 如果您的显示单元格或可见单元格为 6,则将出现 6 个错误。单元格是可重复使用的,因此它只占用可见单元格的内存。这不是问题

标签: ios swift imageurl


【解决方案1】:

您正在使用TableViewTableView,根据屏幕尺寸和Cell 尺寸,它会在您的屏幕中显示最大单元格,因此在您的情况下它可能会加载6 个单元格 数据和所有 6 个单元格都有加载图像方法,因此其抛出错误 6 次。

为了延迟加载图像,有许多著名的库可以管理单次下载和缓存该图像。

SDWebImage 是最适合您的问题的库之一。

链接:SDWebImage

并按照以下代码从服务器获取图像。

斯威夫特:

import SDWebImage

imageView.sd_setImage(with: URL(string: "http://www.example.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))

在您的 loadCell 方法中添加上述代码行和您的 imageURL。

请使用 Apple Reachability 类检查 Internet 连接,如果有 Internet 连接,请加载您的图像。

编辑:

对于本地存储图像,您可以使用 SDWebImage Downloader 的以下功能并在将图像显示给用户之前缓存您的图像。

SDWebImageManager.shared().imageDownloader?.downloadImage(with: NSURL(string: strURL) as URL!, options: SDWebImageDownloaderOptions.continueInBackground, progress: {
                (receivedSize, ExpectedSize, imageURL) in
                print("receive:",receivedSize,"Expected:",ExpectedSize,"Image URL:",imageURL ?? "No URL")
            }, completed: {
                (image, data, error, finished) in
                print("Image Data:",data ?? "No Data")
                // Do your stuff to store downloaded image
            })

链接:Reachability Sample

希望这会有所帮助。

【讨论】:

  • 网络图像在所有单元格中显示良好,当有互联网连接时。我还是不明白。
  • 好的,所以你必须使用可达性类并检查是否有 Internet 连接加载图像,否则加载占位符或默认图像。
  • 我不明白你的意思。我已经检查了视图控制器中的网络连接。如果有互联网连接,api 会将 imageurl 字符串提供给数据库,而数据库会提供给我们该字符串并且显示良好。如果没有互联网连接数据库仍然给出相同的 imageurl 字符串。我已经在控制台中记录了它。但没有显示在单元格中。
  • 您现在已经在 viewDidLoad() 中检查网络连接,如果没有互联网连接,您仍在从数据库中获取数据并将其显示在屏幕上,离线数据和图像来自服务器,为此您需要 Internet 连接,因此您必须将条件代码放入 LoadCell 方法中,如果有 Internet 连接,您将下载图像数据,如果没有,则在单元格中显示默认图像。
  • 如果没有网络连接就无法显示从本地数据库获取的图像?有什么办法可以离线显示图片吗?
猜你喜欢
  • 2018-08-18
  • 1970-01-01
  • 2018-08-10
  • 2019-01-02
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 2017-06-16
  • 2020-05-06
相关资源
最近更新 更多