【问题标题】:Swift - How do I get the file path inside a folderSwift - 如何获取文件夹内的文件路径
【发布时间】:2016-04-05 13:32:20
【问题描述】:

我在一个文件夹中有一组音频文件。当文件放在主包中时,我可以访问该文件,但如果将文件移动到文件夹内,我将无法访问这些文件。

代码:

let audioFileName:String = "audioFiles/" + String(index)
let audioFile = NSBundle.mainBundle().pathForResource(audioFileName, ofType: "mp3")!

我在文件夹 audioFiles 中有一个音频文件,我想获取它的路径。

错误:

致命错误:在展开可选值时意外发现 nil

【问题讨论】:

  • 问题在哪里?请添加更多信息
  • 您确定音频文件安装在应用程序包的子目录中吗?
  • 是的,音频文件在应用程序包的子目录中

标签: ios swift


【解决方案1】:

首先确保当您将文件夹 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)
}

【讨论】:

  • 您的文件夹是黄色的,应该是与您的 swift 文件位于同一文件夹中的蓝色文件夹
  • 如果您不按照我所说的复制文件,将无济于事。 AppDelegate.swift 下方的蓝色文件夹
  • 谢谢。有效。最初我在 Xcode 中创建了文件夹,然后按照您解释的方式添加了文件。现在我已经清除了所有内容并按照您解释的方式添加了完整的文件夹并且它有效。非常感谢!
  • swift 示例 3. if let indexFilePath = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "homeless-help-web") { print(indexFilePath) }
  • 不起作用,我没有胶水为什么。文件名和折叠名是对的,但是程序看不到。
【解决方案2】:

Leo 的回答应该有效,关键步骤是检查“如果需要,请复制项目”。但是,如果您已经创建了文件或忘记了该关键步骤,您会怎么做?

它很容易修复。

转到Project -> Build Phases -> Copy Bundle Resources

在这里,您将看到已添加到捆绑包中的所有文件的方便列表(包括所有 xcasset!)

单击添加按钮,找到您丢失的未链接文件。

您的代码现在可以工作了(我构建了自己的示例,因此名称与您的不同):

        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 资源)它不存在。哒哒!

【讨论】:

    猜你喜欢
    • 2015-01-25
    • 2011-05-08
    • 2014-11-05
    • 1970-01-01
    • 2010-10-14
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多