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个图像网址: 请有人帮我解决这个问题。我受了什么冤枉。
答案 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
})
希望这会有所帮助。