【发布时间】:2016-08-08 21:22:04
【问题描述】:
我正在尝试编写具有多层嵌套的字典到 Swift 中的进度列表 (plist)。但是,由于某种原因,当我检查导致项目中出现一堆类型问题的 plist 时,其中一个字典被视为一个数组。
这是原始的嵌套字典:
我附上了一个显示 plist 结构的屏幕截图和另一个显示原始数据结构的屏幕截图,我知道您不是要显示代码照片,但是这个文本编辑器没有正确格式化它并且误用了尖括号
更新
好的,我在最顶层添加了一个键值对,并将其正确写入字典。我现在遇到的问题是我可以很好地写入 plist,但是当我尝试从中读取时,我得到的只是零。
func initializeProgress() {
let directories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
if let documents = directories.first {
if let urlDocuments = NSURL(string: documents) {
let urlProgress = urlDocuments.URLByAppendingPathComponent("progress.plist")
let progressDict = NSDictionary(dictionary: ["AP Biology": ["Misc": ["correct": 0, "incorrect": 0, "totalInSection": 0, "percentDone": 0],
"Basics": ["correct": 0, "incorrect": 0, "totalInSection": 0, "percentDone": 0],
"Essential Chemistry": ["correct": 0, "incorrect": 0, "totalInSection": 0, "percentDone": 0],
"Molecules of Life": ["correct": 0, "incorrect": 0, "totalInSection": 0, "percentDone": 0]]])
progressDict.writeToFile(urlProgress.path!, atomically: true)
}
}
}
func retrieveAndSetProgress() {
let directories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
let documents = directories.first
let urlDocuments = NSURL(string: documents!)
let urlProgress = urlDocuments!.URLByAppendingPathComponent("progress.plist")
print(NSDictionary(contentsOfURL: urlProgress))
let data = NSData(contentsOfURL: urlProgress, options: NSDataReadingOptions())
print(data)
progress = NSDictionary(contentsOfURL: urlProgress)! as! Dictionary<String, Dictionary<String, Dictionary<String, Int>>>
}
progress是全局变量,第二种方法的最后一行报错:fatal error: unexpectedly found nil while unwrapping an Optional value
【问题讨论】:
-
对我来说很好,把代码贴在你写/读 plist 的地方
-
我实际上能够通过在字典的最顶层添加另一个键值对来使其正常工作。我现在遇到的问题是,当我尝试将它读回我的项目时,它是 nil 吗?我将立即发布读/写代码。感谢您的帮助。
-
@dan 我已经更新了问题并添加了我用来读写的两种方法,感谢您的帮助