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
            })

Ссылка: образец доступности

Надеюсь, это поможет.

Другие вопросы по тегам