【问题标题】:Ho to view HTML from outside the xcode project如何从 xcode 项目外部查看 HTML
【发布时间】:2018-10-12 05:38:51
【问题描述】:

我希望能够加载位于我的应用程序包之外的 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)

这是从我的项目资源中加载名为 index 的 HTML 文件。我希望它从用户定义的位置读取文件。这样用户就可以告诉应用 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 中有关?
如果是这样,我也会改变什么?

【问题讨论】:

    标签: html swift xcode macos webview


    【解决方案1】:

    您的问题出在以下代码行:

    let htmlPath = Bundle.main.path(forResource: "\(file)", ofType:"html")
    

    当文件位于用户定义的位置时,您正在应用的应用程序包中搜索该文件。该应用程序在应用程序包中找不到该文件,因此htmlPath 为零。当您设置 URL 时,应用程序会崩溃,因为您隐式地解开 nil htmlPath

    我无法具体告诉您要将路径更改为什么,因为路径是用户定义的。要解决您的问题,您需要跟踪应用程序中用户定义的位置,以便您可以从那里加载文件。 User Defaults 是将用户定义的位置保存为应用程序首选项的一部分的好地方。查看 Apple 文档中的 UserDefaults 类。查看FileManagerURL 类以在用户桌面上找到文件并加载它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多