Я хочу иметь возможность загружать HTML-файл, расположенный за пределами моего пакета приложений, на данный момент я могу загрузить файл, выполнив следующие действия: Это приложение для MacOS
let htmlPath = Bundle.main.path(forResource: "/html/index", ofType:"html")
let url = URL(fileURLWithPath: htmlPath!)
let request = URLRequest(url: url)
webView.load(request)
Это загрузка HTML-файла с именем index из ресурсов моего проекта. Я хочу, чтобы он прочитал файл из определенного пользователем местоположения. чтобы пользователь мог сообщить приложению, что HTML-файл находится на его рабочем столе.
я предполагаю, что код будет примерно таким:
@IBOutlet var fileLocation: NSTextField
@IBOutlet var webView: WKWebView!
var file = fileLocation.StringValue
let htmlPath = Bundle.main.path(forResource: "\(file)", ofType:"html")
let url = URL(fileURLWithPath: htmlPath!)
let request = URLRequest(url: url)
webView.load(request)
Однако этот код выше приводит к сбою с ошибкой
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
Связана ли ошибка с указанием пути в Bundle.main.path?
Если да, то что бы я тоже это изменил?






Ваша проблема в следующей строке кода:
let htmlPath = Bundle.main.path(forResource: "\(file)", ofType:"html")
Вы ищете файл в пакете приложений вашего приложения, когда файл находится в определенном пользователем месте. Приложение не может найти файл в пакете приложений, поэтому значение htmlPath равно нулю. Когда вы устанавливаете URL-адрес, приложение вылетает, потому что вы неявно разворачиваете nil htmlPath.
Я не могу сказать вам конкретно, на что нужно изменить путь, потому что путь определяется пользователем. Чтобы решить вашу проблему, вам необходимо отслеживать определенное пользователем местоположение в вашем приложении, чтобы вы могли загрузить файл оттуда. User Defaults - хорошее место для сохранения определенного пользователем местоположения как части настроек приложения. Посмотрите на класс UserDefaults в документации Apple. Посмотрите на классы FileManager и URL, чтобы найти файл на рабочем столе пользователя и загрузить его.