当我尝试通过 Bundle.main 访问它时,我的 plist returns 为零,但我知道它在那里
My plist returns nil when I try to access it through the Bundle.main, but I know it's there
我在代码中创建了一个名为 Configuration.plist
的 .plist 文件。 运行 应用一次后,我可以在文件系统(使用模拟器)中看到它确实存在。
我
我正在学习 iOS 开发。在互联网上搜索“如何从我自己的 plist 中读取”的答案后,我不断看到教程告诉我像这样读取这个文件:
if let path = Bundle.main.path(forResource: K.files.config, ofType: "plist"),
let xml = FileManager.default.contents(atPath: path),
let config = try? PropertyListDecoder().decode(Configuration.self, from: xml){
print("We have a config: \(config.mainTitle)")
return config
} else {
print("No config ☹️")
return nil
}
在上面的例子中,K.files.config只是一个字符串常量,配置class符合Codable协议。 K.file.config 的值为“配置”。但是,在上面的示例中,路径总是 returns nil。但是我知道这个文件存在!!
事实上,当我这样访问这个文件时,我实际上可以得到路径:
let fileName = K.files.config + ".plist"
var filePath = ""
let dirs: [String] = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true)
if dirs.count > 0 {
let dir = dirs[0]
filePath = dir.appendingFormat("/" + fileName)
print("Local path: \(filePath)")
} else {
print("Could not find local directory for Configuration.plist")
return nil
}
if let xml = FileManager.default.contents(atPath: filePath),
let config = try? PropertyListDecoder().decode(Configuration.self, from: xml){
print("got a config: \(config.mainTitle)")
} else {
print("didn't get the xml")
}
这更加冗长和丑陋。为什么第一种方法不行?
当您创建 Configuration.plist
时,您将其保存到 Documents 文件夹中...
该文件夹在您的应用程序包之外。
因此,在您的第一个代码块中,您尝试从包加载它,但失败了。
您的第二个代码块正确地从 Documents 文件夹中查找并加载文件。
我在代码中创建了一个名为 Configuration.plist
的 .plist 文件。 运行 应用一次后,我可以在文件系统(使用模拟器)中看到它确实存在。
我正在学习 iOS 开发。在互联网上搜索“如何从我自己的 plist 中读取”的答案后,我不断看到教程告诉我像这样读取这个文件:
if let path = Bundle.main.path(forResource: K.files.config, ofType: "plist"),
let xml = FileManager.default.contents(atPath: path),
let config = try? PropertyListDecoder().decode(Configuration.self, from: xml){
print("We have a config: \(config.mainTitle)")
return config
} else {
print("No config ☹️")
return nil
}
在上面的例子中,K.files.config只是一个字符串常量,配置class符合Codable协议。 K.file.config 的值为“配置”。但是,在上面的示例中,路径总是 returns nil。但是我知道这个文件存在!!
事实上,当我这样访问这个文件时,我实际上可以得到路径:
let fileName = K.files.config + ".plist"
var filePath = ""
let dirs: [String] = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true)
if dirs.count > 0 {
let dir = dirs[0]
filePath = dir.appendingFormat("/" + fileName)
print("Local path: \(filePath)")
} else {
print("Could not find local directory for Configuration.plist")
return nil
}
if let xml = FileManager.default.contents(atPath: filePath),
let config = try? PropertyListDecoder().decode(Configuration.self, from: xml){
print("got a config: \(config.mainTitle)")
} else {
print("didn't get the xml")
}
这更加冗长和丑陋。为什么第一种方法不行?
当您创建 Configuration.plist
时,您将其保存到 Documents 文件夹中...
该文件夹在您的应用程序包之外。
因此,在您的第一个代码块中,您尝试从包加载它,但失败了。
您的第二个代码块正确地从 Documents 文件夹中查找并加载文件。