【问题标题】:Is this a Swift bug? Opening a File in a webView这是一个 Swift 错误吗?在 webView 中打开文件
【发布时间】:2014-07-06 01:27:38
【问题描述】:

我正在开始学习这种我非常喜欢的新语言……但它似乎比我预期的要复杂。

我在 youtube (https://www.youtube.com/watch?v=Rva9ylPHi2w) 上举了一个简单的例子,在根 viewController 中构建一个 webView 并加载一个网页。此示例适用于外部网页,但不适用于本地文件。尝试打开本地文件时出现空白屏幕。

以下代码用于 ViewController.swift 文件。

import UIKit

class ViewController: UIViewController {

    @IBOutlet var WebView : UIWebView

    var URLPath = ""/files/test.html""

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        loadAddressURL()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func loadAddressURL() {
        let requestURL = NSURL (string:URLPath)
        let request = NSURLRequest(URL: requestURL)

        println("the requestURL is: \(requestURL)")

        WebView.loadRequest(request)
    }

}

您可以看到我添加了一个 println 来显示正在使用的 URL 请求,并且它向后显示:

使用本地文件,我得到“requestURL 是:/files/test.html”,这是我的示例 html 文件所在的位置。

是我做错了什么还是我应该向 Apple 归档?

【问题讨论】:

    标签: ios webview swift


    【解决方案1】:

    这就是我存档以从本地文件加载 html 的方式

     let bundle = NSBundle.mainBundle()
     var url = bundle.URLForResource("yourHTML", withExtension: "html");
     var request = NSURLRequest(URL: url!);
     webContent.loadRequest(request)
    

    【讨论】:

      【解决方案2】:

      不要使用该构造函数创建NSURL,而是使用[NSURL fileURLWithPath:] 而是。

      【讨论】:

      • 是的,我之前尝试过,并且在 println 中得到了一个非常奇怪的路径:“requestURL is: /files/test.html -- file:///”。请注意在我的 var 加载后如何插入“文件///”,这当然会使 mw 出现空白屏幕,因为路径无效。
      • 是的,[NSURL description] 就是这样打印的,但这并不是 URL 的真实样子。
      • 所以它仍然不起作用,我在模拟器中得到的只是一个空白的 webView。听起来我会用 Apple 开始一个错误
      • 我非常非常怀疑这是 Apple 的错误。将文件放在应用程序的文档目录中,并在那里访问它。
      • 我从那里开始使用它,但它在那里也不起作用。我移到了主应用程序目录下的 files 目录,这是我最终希望它去的地方。
      【解决方案3】:

      您无法真正加载“本地文件”。相反,请确保您的文件已添加到目标的 Copy Bundle Resources 构建阶段,并询问默认的 NSBundle 其 URL,例如:

      let url = NSBundle.mainBundle().URLForResource("test", withExtension: "html")
      

      如果文件位于项目组(黄色图标)文件中,则不必提供任何路径信息,因为复制的是文件而不是项目组。

      如果文件位于文件夹引用中(蓝色文件夹图标),则将整个文件夹复制到包中。在这种情况下,请改用URLForResource(, withExtension:, subdirectory:) 或任何类似方法。 (查看NSBundle的文档或头文件)

      【讨论】:

      • 如果我这样做,我应该如何包含任何路径信息?
      • @padapa 哦,对不起,我猜你不必(见编辑)
      • 你是对的,我没有看到编辑。我会试一试的。
      【解决方案4】:

      我是新手,所以不要相信我的代码

      似乎它可以工作,但是它使我的 xCode 6 滞后(不寻常。)如果您将 index.html 文件放在应用程序的索引上,我会放弃 AppleDev/Swift Dive (https://www.youtube.com/watch?v=Rva9ylPHi2w) 提供的教程,这是要使用的代码;

      import UIKit
      class ViewController: UIViewController {
      
          @IBOutlet weak var webview: UIWebView!
          let url = NSBundle.mainBundle().URLForResource("index", withExtension: "html")
      
          override func viewDidLoad() {
              super.viewDidLoad()
              // Do any additional setup after loading the view, typically from a nib.
              loadAddressURL()
          }
      
          override func didReceiveMemoryWarning() {
              super.didReceiveMemoryWarning()
              // Dispose of any resources that can be recreated.
          }
      
          func loadAddressURL() {
              let request = NSURLRequest(URL: url!)
              webview.loadRequest(request)
          }
      }
      

      索引看起来有点像这样:

      Folder Project/app/
      Folder Project/app/AppDelaget.swift
      Folder Project/app/ViewController.swift
      Folder Project/app/main.storybord
      Folder Project/app/index.html
      

      【讨论】:

        【解决方案5】:

        Swift 语言中的 UIWebView :-

        请更新您的代码并将 URLPath 设置为双引号 like this

        var URLPath = "/files/test.html"
        

        您也可以将此代码用于 WebView

        self.webView!.loadRequest(NSURLRequest(URL:NSURL(string:"https://www.google.com")))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-29
          • 2020-12-04
          • 1970-01-01
          • 1970-01-01
          • 2019-04-15
          • 2012-09-18
          相关资源
          最近更新 更多