在Swift 3.0中从主捆绑包加载XML文件

在Swift 3.0中从主捆绑包加载XML文件,swift,nsxmlparser,nsxmlparserdelegate,Swift,Nsxmlparser,Nsxmlparserdelegate,我有一个.GPX文件,其中包含一次徒步旅行的路线信息,我想将其加载到我的应用程序中。如果我从远程URL()加载它,一切都正常,但我无法从应用程序包加载相同的文件(已经在“复制包资源”中,并且具有正确的目标成员身份) 以下是我从远程URL加载此文件的代码: var xmlParser: XMLParser! func startParsingFileFromURL(urlString: String) { guard let url = URL(string: urlString) e

我有一个.GPX文件,其中包含一次徒步旅行的路线信息,我想将其加载到我的应用程序中。如果我从远程URL()加载它,一切都正常,但我无法从应用程序包加载相同的文件(已经在“复制包资源”中,并且具有正确的目标成员身份)

以下是我从远程URL加载此文件的代码:

var xmlParser: XMLParser!


func startParsingFileFromURL(urlString: String) {
    guard let url = URL(string: urlString) else {
        print("Can't load URL: \(urlString)")
        return
    }
    self.xmlParser = XMLParser(contentsOf: url)
    self.xmlParser.delegate = self
    let result = self.xmlParser.parse()
    print("parse from URL result: \(result)")
    if result == false {
        print(xmlParser.parserError?.localizedDescription)
    }

}
从主捆绑中:

func startParsingFile(fileName: String, fileType: String) {
    guard let urlPath = Bundle.main.path(forResource: fileName, ofType: fileType) else {
        print("Can't load file \(fileName).\(fileType)")
        return
    }
    guard let url:URL = URL(string: urlPath) else {
        print("Error on create URL to read file")
        return
    }
    self.xmlParser = XMLParser(contentsOf: url)
    self.xmlParser.delegate = self
    let result = self.xmlParser.parse()
    print("parse from file result: \(result)")
    if result == false {
        print(xmlParser.parserError?.localizedDescription)
    }
}
从应用程序包加载时出错:

parse from file result: false
Optional("The operation couldn’t be completed. (Cocoa error -1.)")
你是说:

guard let urlPath = Bundle.main.path(forResource: fileName, ofType: fileType) else {
    print("Can't load file \(fileName).\(fileType)")
    return
}
guard let url:URL = URL(string: urlPath) else {
    print("Error on create URL to read file")
    return
}
首先,将字符串路径转换为URL是非常愚蠢的。你知道你想要一个URL,那么为什么不先调用
URL(forResource:…)


第二,如果你真的把一个字符串路径变成了一个URL,你必须做一个。

谢谢你的建议,我改成了
let URL=Bundle.main.URL(forResource:fileName,扩展名:fileType)
,现在一切都好了