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

Posted

技术标签:

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

我在这里提出了一个问题,该问题可能有一个我忽略的非常简单的答案...我这里有这个:

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 上。我已经四处搜索并在这里和其他地方尝试了一些建议,但无济于事。请帮忙? :(

【问题讨论】:

【参考方案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 的答案让我很困惑。干杯!

以上是关于如何使用 NSURL 检索本地文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSURL 访问本地文件

无法使用 NSURL 访问本地资源。奇怪的

从 NSURL 检索文件名

如何在本地使用带有 express 的 graphql 和带有 mongoose 的 mongodb 来检索文档?

NSURL

如何从应用程序本地检索图像并使用 Objective-C 在 UIImageView 上显示