我使用以下代码将 2D 字符串数组保存到 plist:
func saveFavourites(favouriteStops: [[String]]) {
let directories = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)
if let library = directories.first {
if let libraryUrl = URL(string: library) {
let favouritesUrl = libraryUrl.appendingPathComponent("favourites.plist")
// Write favourites to disk
let favsArray = favouriteStops as NSArray
print(favsArray)
favsArray.write(toFile: favouritesUrl.path, atomically: true)
}
}
}
上面的代码片段正确创建了 .plist 文件(通过查看 ~/Library/Developer/CoreServices
中模拟器的文件系统进行确认)。但是,当我尝试使用以下代码片段将其读回 NSArray 时,结果为 nil:
let directories = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)
if let library = directories.first {
if let libraryUrl = URL(string: library) {
let favouritesUrl = libraryUrl.appendingPathComponent("favourites.plist")
// favsToLoad is nil
let favsToLoad = NSArray(contentsOf: favouritesUrl)
// Do stuff with favsToLoad, if it would load properly
}
}
最佳答案
你做错了两件非常基本的事情。
首先,永远不要通过
URL(string)
从文件路径创建 URL;这是磁盘上的文件,因此您必须使用URL.fileURL
。第二,根本不要以文件路径开头!从一开始就以 URL 的形式获取目录。
(另外,虽然我不知道这是否是问题的根源,但不要直接在 Library 目录中读写。请使用 Documents 目录、Application Support 目录或类似目录。)
例如,我会写:
let fm = FileManager.default
let docsurl = try fm.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let favouritesurl = docsurl.appendingPathComponent("favourites.plist")
关于ios - 如何从 Swift 中的 plist 读取多维字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43702060/