【发布时间】:2021-07-02 18:15:45
【问题描述】:
我在代码中创建了一个名为 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 只是一个字符串常量,Configuration 类符合 Codable 协议。 K.file.config 的值为“配置”。然而,在上面的例子中,path 总是返回 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")
}
这更加冗长和丑陋。为什么第一种方法不起作用?
【问题讨论】: