Не могу загрузить изображения из каталога `Documents` на устройстве - PullRequest
0 голосов
/ 04 марта 2020

На симуляторе это работает. Вот путь, который я напечатал при сохранении изображения:
/var/mobile/Containers/Data/Application/31912F79-EB94-4DB1-84B8-68C7368B9160/Documents/t123t.jpg

И это тег img в html, который должен загружать изображение в webView (нормально работал на симуляторе):
img src="file:///var/mobile/Containers/Data/Application/31912F79-EB94-4DB1-84B8-68C7368B9160/Documents/t123t.jpg">

Поскольку я вижу, что все выглядит хорошо здесь, я думал, что проблема должна быть в пути, я удалил часть file:// из img src, но это не помогло мне.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Решено
По какой-то причине изображения в Documents не были доступны таким образом при загрузке html из строки. Мне нужно было создать папку html file в Documents, чтобы можно было читать изображения из этой папки.
Итак, html и изображения (ресурсы) должны находиться в одной папке .
Код, который не работал:

webView.loadHTMLString(html, baseURL: URL(fileURLWithPath: Bundle.main.bundlePath))
//html is a string.

Код, который работает:

 let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
 let documentsDirectory = paths[0]
 let filename = documentsDirectory.appendingPathComponent("index.html")

 do {
     //html is a string
     try html.write(to: filename, atomically: true, encoding: String.Encoding.utf8)
      } catch {
            //...
     }
 webView.loadFileURL(filename, allowingReadAccessTo: documentsDirectory)
0 голосов
/ 04 марта 2020

Хорошо, во-первых, указанный вами путь

/var/mobile/Containers/Data/Application/31912F79-EB94-4DB1-84B8-68C7368B9160/Documents/t123t.jpg

Папка со случайной строкой (Inside Application) всегда изменяется после повторного открытия приложения.

Apple реализовала это в целях безопасности.

            let documentDirectory = FileManager.SearchPathDirectory.documentDirectory
            let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
            let paths = NSSearchPathForDirectoriesInDomains(documentDirectory, userDomainMask, true).first
            let path: String = paths!
            //path has address of document directory and we need address of tmp directory where pictures are stored

            let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent("\(url)")
            let image = UIImage(contentsOfFile: imageURL.path)

Это сработало для меня в моем первом проекте, когда я застрял в той же проблеме.

Надеюсь, я вам помог:)

Счастливое кодирование

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...