Error Domain=NSCocoaErrorDomain Code=256 "Файл" images "не может быть открыт". UserInfo={NSURL= HTTP://
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 и поместил их в объект, а затем вставил в базу данных. Во время отображения данных я извлек их из базы данных и перечислил их в виде таблицы. Если есть подключение к Интернету, все работает нормально. Если нет подключения к Интернету, URL-адрес изображения не работает, он печатает ошибку 6 раз. (У меня есть 10 изображений в базе данных или API). Кроме того, в ImgUrlInCell в консоли отображается 10 URL-адресов изображений. Пожалуйста, кто-нибудь поможет мне с этой проблемой. Что я обидел.
1 ответ
Ты используешь TableView
И в TableView
согласно размеру экрана и Cell
Если на экране будет отображаться максимальная ячейка, то, возможно, в вашем случае загрузка данных 6 ячеек и всех 6 ячеек будет иметь метод загрузки изображения, поэтому ошибка выдачи будет 6 раз.
Для этого есть много библиотек, которые будут управлять разовой загрузкой и кэшировать этот образ в приложении самостоятельно.
SDWebImage - лучшая библиотека для вашей проблемы.
Ссылка: SDWebImage
И следуйте приведенному ниже коду, чтобы получить изображение с сервера.
Swift:
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 и загрузите изображение, если есть подключение к Интернету.
Редактировать:
Для локального хранения изображения вы можете использовать функцию 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
})
Ссылка: образец доступности
Надеюсь, это поможет.