我正在使用.json文件从iOS应用程序读取和写入数据。目前我有一个应用程序,其中文本字段中的任何内容都将写入json文件,然后当按下按钮时,它会显示刚刚写入标签的内容。基本上只是测试阅读和写作。它从json文件中读取初始值,但是当我写入json文件然后尝试再次读取它时,它会给我错误:
“主题1:致命错误:'试试!'表达式意外地引发了错误:错误Domain = NSCocoaErrorDomain Code = 3840“字符0周围的值无效。”UserInfo = {NSDebugDescription =字符0周围的值无效。}“。
感谢任何帮助。
@IBAction func UpdateLabelTapped(_ sender: UIButton) {
let path = Bundle.main.path(forResource: "SaveData", ofType: "json")
let url = URL(fileURLWithPath: path!)
let data = try! Data(contentsOf: url)
let obj = try! JSONSerialization.jsonObject(with: data, options: .allowFragments)
if let str = (obj as! NSDictionary).value(forKey: "message") {
self.DataLabel.text = str as? String ?? ""
}
}
@IBAction func WriteToJSONTapped(_ sender: UIButton) {
let path = Bundle.main.path(forResource: "SaveData", ofType: "json")
let url = URL(fileURLWithPath: path!)
let dict = NSMutableDictionary()
dict.setValue("Writing JSON!!", forKey: "message")
dict.write(to: url, atomically: true)
}
它出现在let obj = try! JSONSerialization.jsonObject(with: data, options: .allowFragments)
答案 0 :(得分:1)
这看起来很可疑:
dict.write(to: url, atomically: true)
write(to:atomically:)
saves属性列表格式的字典,而不是JSON。要编写JSON,请尝试以下操作:
let jsonData = try! JSONSerialization.data(withJSONObject: dict)
try! jsonData.write(to: url, options: [])
注意:确保在生产代码中正确处理错误。 : - )