Bundle.main.path找不到项目中添加的文本文件

时间:2017-10-29 22:07:51

标签: swift macos nsbundle

我在Xcode 9中有一个命令行项目,我试图通过"添加文件到..."来读取我添加到项目中的文本文件。我使用以下行来获取文件的路径:

guard let filePath = Bundle.main.path(forResource: "stops", ofType: "csv") else {
        fatalError("Cannot find CSV file")
    }

当我运行它时,它打印出fatalError消息。我尝试在"复制捆绑资源"中添加文本文件。建设阶段。它仍然无法找到该文件。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

去年年初,我遇到了同样的问题 - 这是我的解决方法(我必须强调这是一个解决方案,希望现在有另一种方法可以做到)

  1. 在项目中创建一个可用于访问数据的Swift文件(我的Recipe.swift}
  2. 将您的CSV放入xcode(忽略目标会员资格 - 只是为了方便(我是Recipe.json))
  3. 创建一个运行脚本阶段,将CSV中的数据加载到Swift类中:

    set -e
    DATA=$(cat "./MyProject/recipe.json" | base64)
    echo "import Foundation" > "./MyProject/Recipe.swift"
    echo "class Recipe {" >> "./MyProject/Recipe.swift"
    echo "    static let data = \"$DATA\"" >> "./MyProject/Recipe.swift"
    echo "}" >> "./MyProject/Recipe.swift"
    
  4. 这会在Swift文件中生成一个类似于:

    的类
    import Foundation
        class Recipe {
            static let data = "..."
    }
    

    然后,当您需要使用它时,您可以解码Recipe.data

    当然这不是一个非常易扩展的解决方案,我确信你可以通过使用延迟初始化,直接在生成的类中添加base64解码,使脚本中的路径相对于{{1}这只是我的快速解决方案,使我能够继续完成项目的其余部分。

答案 1 :(得分:0)

我的问题是我首先创建了一个 ResponseJSON.swift,然后将其重命名为 ResponseJSON.json(更改为 .json 扩展名)并且没有被检测到。

解决方案:

  1. 删除文件的引用
  2. 在 Xcode 上再次添加
  3. 编译并微笑着为那些 Xcode 错误哭泣:)