[英]Swift - How do I get the file path inside a folder
我在一个文件夹中有一组音频文件。 当文件放置在主包中时,我可以访问该文件,但是如果将文件移动到文件夹内,我将无法访问这些文件。
代码:
let audioFileName:String = "audioFiles/" + String(index)
let audioFile = NSBundle.mainBundle().pathForResource(audioFileName, ofType: "mp3")!
我在文件夹 audioFiles 中有一个音频文件,我想获取它的路径。
错误:
致命错误:在解开 Optional 值时意外发现 nil
首先确保将文件夹 audioFiles 拖到项目中以根据需要检查复制项目并选择创建文件夹引用。 如果您的项目,请确保它显示一个蓝色文件夹。
NSBundle 方法 pathForResource 也有一个初始化程序,您可以指定文件所在的目录:
let audioFileName = "audioName"
if let audioFilePath = Bundle.main.path(forResource: audioFileName, ofType: "mp3", inDirectory: "audioFiles") {
print(audioFilePath)
}
如果您想获取该文件的 URL,您可以使用 NSBundle 方法 URLForResource(withExtension:, subdirectory:)
if let audioFileURL = Bundle.main.url(forResource: audioFileName, withExtension: "mp3", subdirectory: "audioFiles") {
print(audioFileURL)
}
Leo 的答案应该有效,关键步骤是检查“如果需要,请复制项目”。 但是,如果您已经创建了一个文件或忘记了那个关键步骤,您会怎么做?
它很容易修复。
转到Project
-> Build Phases
-> Copy Bundle Resources
在这里,您将看到已添加到捆绑包中的所有文件的方便列表(包括所有 xcassets!)
单击添加按钮,找到丢失的未链接文件。
您的代码现在可以工作(我构建了自己的示例,因此它的名称与您的名称不同):
if let url = Bundle.main.url(forResource: "testData2", withExtension: "txt") {
do {
let myData = try Data(contentsOf: url)
print(myData.count)
} catch {
print(error)
}
}
那么为什么我们没有找到文件开始呢? 简单的。 我们问的是捆绑。 “嘿,我的文件在哪里”。 Bundle 就像......我不知道那个文件,如果你检查了它的一部分(正在复制的 Bundle 资源)的列表,它就不存在了。 达!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.