将嵌套字典写入 plist 时的类型问题 (Swift)
Type Issues When Writing a Nested dictionary to a plist (Swift)
我正在尝试编写一个具有多层嵌套的字典到 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
改变
print(NSDictionary(contentsOfURL: urlProgress))
至
print(NSDictionary(contentsOfFile: urlProgress.absoluteString))
然后就可以读了。我刚刚在操场上测试
我正在尝试编写一个具有多层嵌套的字典到 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
改变
print(NSDictionary(contentsOfURL: urlProgress))
至
print(NSDictionary(contentsOfFile: urlProgress.absoluteString))
然后就可以读了。我刚刚在操场上测试