Bundle.main.path 找不到项目中添加的文本文件
Bundle.main.path does not find text file added in project
我在 Xcode 9 中有一个命令行项目,我正在尝试读取通过 "Add files to..." 添加到项目中的文本文件。我正在使用以下行来获取文件的路径:
guard let filePath = Bundle.main.path(forResource: "stops", ofType: "csv") else {
fatalError("Cannot find CSV file")
}
当我 运行 它时,它会打印出 fatalError 消息。我尝试在 "Copy Bundle Resources" 构建阶段添加文本文件。它仍然没有找到文件。
我做错了什么?
去年年初我遇到了同样的问题 - 这是我的解决方法(我必须强调这是一种解决方法,希望现在有另一种方法可以解决)
- 在您的项目中创建一个可用于访问数据的 Swift 文件(我的是
Recipe.swift
)
- 将您的 CSV 放入 xcode(忽略目标成员资格 - 只是为了方便(我的是
Recipe.json
))
创建一个 运行 脚本阶段以将数据从 CSV 加载到 Swift class:
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"
这会在您的 Swift 文件中生成一个 class,类似于:
import Foundation
class Recipe {
static let data = "..."
}
然后需要用的时候就可以解码Recipe.data
当然,这不是一个可扩展性很强的解决方案,我相信您可以通过使用延迟初始化、直接在生成的 class 中添加 base64 解码、在脚本中创建路径来使其变得更好相对于 $SRCROOT
等。这只是我的快速解决方案,让我可以继续处理项目的其余部分。
我的问题是我先创建了一个 ResponseJSON.swift
,然后将其重命名为 ResponseJSON.json
(更改为 .json 扩展名),但未被检测到。
解法:
- 删除文件的引用
- 在 Xcode
上再次添加
- 一边编译一边微笑着面对那些 Xcode 个错误 :)
我在 Xcode 9 中有一个命令行项目,我正在尝试读取通过 "Add files to..." 添加到项目中的文本文件。我正在使用以下行来获取文件的路径:
guard let filePath = Bundle.main.path(forResource: "stops", ofType: "csv") else {
fatalError("Cannot find CSV file")
}
当我 运行 它时,它会打印出 fatalError 消息。我尝试在 "Copy Bundle Resources" 构建阶段添加文本文件。它仍然没有找到文件。
我做错了什么?
去年年初我遇到了同样的问题 - 这是我的解决方法(我必须强调这是一种解决方法,希望现在有另一种方法可以解决)
- 在您的项目中创建一个可用于访问数据的 Swift 文件(我的是
Recipe.swift
) - 将您的 CSV 放入 xcode(忽略目标成员资格 - 只是为了方便(我的是
Recipe.json
)) 创建一个 运行 脚本阶段以将数据从 CSV 加载到 Swift class:
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"
这会在您的 Swift 文件中生成一个 class,类似于:
import Foundation
class Recipe {
static let data = "..."
}
然后需要用的时候就可以解码Recipe.data
当然,这不是一个可扩展性很强的解决方案,我相信您可以通过使用延迟初始化、直接在生成的 class 中添加 base64 解码、在脚本中创建路径来使其变得更好相对于 $SRCROOT
等。这只是我的快速解决方案,让我可以继续处理项目的其余部分。
我的问题是我先创建了一个 ResponseJSON.swift
,然后将其重命名为 ResponseJSON.json
(更改为 .json 扩展名),但未被检测到。
解法:
- 删除文件的引用
- 在 Xcode 上再次添加
- 一边编译一边微笑着面对那些 Xcode 个错误 :)