【问题标题】:How can I retrieve local files with NSURL?如何使用 NSURL 检索本地文件?
【发布时间】:2015-04-09 17:57:47
【问题描述】:

我在这里提出了一个问题,该问题可能有一个我忽略的非常简单的答案...如何使用 NSURL 检索本地文件?我这里有这个:

override func viewDidLoad() {
    super.viewDidLoad()
    var urlpath = NSBundle.mainBundle().pathForResource("bpreg", ofType: "xml")
    let url:NSURL = NSURL(string: urlpath!)!
    parser = NSXMLParser(contentsOfURL: url)!
    parser.delegate = self
    parser.parse()
}

但是在它成功构建后它会挂在 var urlpath 上。我已经四处搜索并在这里和其他地方尝试了一些建议,但无济于事。请帮忙? :(

【问题讨论】:

    标签: ios xcode swift filesystems nsurl


    【解决方案1】:

    您正在尝试从文件系统加载文件,而不是从网络加载。

    要创建NSURL,您需要使用fileURLWithPath: 类方法。

    改变你的方法,如:

    斯威夫特 2

    override func viewDidLoad()
    {
        super.viewDidLoad()
        var urlpath     = NSBundle.mainBundle().pathForResource("bpreg", ofType: "xml")
        let url:NSURL   = NSURL.fileURLWithPath(urlpath!)!
        parser          = NSXMLParser(contentsOfURL: url)!
        parser.delegate = self
        parser.parse()
    }
    

    斯威夫特 3

    override func viewDidLoad()
    {
        super.viewDidLoad()
        let urlpath     = Bundle.main.path(forResource: "bpreg", ofType: "xml")
        let url         = NSURL.fileURL(withPath: urlpath!)
        parser          = XMLParser(contentsOf: url)!
        parser.delegate = self
        parser.parse()
    }
    

    注意:在 Swift 3 中,您还可以使用 URL 类来构造 url,而不是 NSURL 类。所以上面构造url的代码变成了:

    let url = URL(fileURLWithPath: urlpath!)
    

    【讨论】:

    • 更好的是,只需使用URLForResource 而不是pathForResource,如下所示。折腾哪个答案更好,都留下一些东西。
    • 谢谢你。完美运行!
    • @MidhunMP 很抱歉再次打扰您,但我在本节遇到了类似的问题(加载本地 html 文件)。也许你可以在这里指出我的愚蠢错误? :)
    • override func viewDidLoad() { super.viewDidLoad() var url = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(pageLink, ofType: "html")!) var request = NSURLRequest(URL: url!) webView.loadRequest(request) webView.delegate = self }
    • 对不起,我自己修好了! :) override func viewDidLoad() { super.viewDidLoad() let url = NSBundle.mainBundle().URLForResource(pageLink, withExtension: "html"); let request = NSURLRequest(URL: url!) webView.loadRequest(request) webView.delegate = self }
    【解决方案2】:

    你应该使用 URLForResource(_:withExtension:) 而不是 pathForResource:

    let fileUrl = Bundle.main.url(forResource: "bpreg", withExtension: "xml")
    

    【讨论】:

      【解决方案3】:

      你的文件在你的主包中还不存在。

      您必须将您正在使用的文件添加到您的捆绑资源中。

      所以添加它。转到App Target -> Build Phases 并检查Bundle Resource 并通过拖放添加它。

      【讨论】:

      • 我确实检查了这个,它就在那里。 Midhun MP 的答案让我很困惑。干杯!
      猜你喜欢
      • 1970-01-01
      • 2013-11-26
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多