错误域= NSCocoaErrorDomain代码= 256"无法打开文件“images”。"的UserInfo = {NSURL = HTTP://

时间:2017-05-09 05:58:29

标签: ios swift imageurl

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中列出它们。 如果有互联网连接,一切正常 如果没有互联网连接图片网址不起作用,则会打印错误6次。 (我在数据库或API中有10张图片) 此外,在ImgUrlInCell的控制台中显示了10个图像网址: 请有人帮我解决这个问题。我受了什么冤枉。

1 个答案:

答案 0 :(得分:-1)

您正在使用TableView并在TableView按照屏幕尺寸和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"))

使用您的imageURL将loadCell方法中的代码放在上面。

请使用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

希望这会有所帮助。