如何使用 NSURL 检索本地文件?

How can I retrieve local files with NSURL?

我的问题可能有一个非常简单的答案,但我忽略了...如何使用 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 上。我四处搜索并在这里和其他地方尝试了一些建议但无济于事。请帮忙? :(

您的文件还不存在于您的主包中。

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

所以补充一下。转到 App Target -> Build Phases 并选中 Bundle Resource 并通过拖放添加它。

您正在尝试从您的文件系统而不是 Web 加载文件。

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

改变你的方法,如:

Swift 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()
}

Swift 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()
}

注意:在Swift3中你也可以使用URLclass来构造url而不是NSURL class。所以上面构造url的代码改为:

let url = URL(fileURLWithPath: urlpath!)

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

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