如何使用 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 检索本地文件?的主要内容,如果未能解决你的问题,请参考以下文章