0
您好我正嘗試從我的應用程序中的文件中編寫和讀取一些數據JSON格式。 我知道在設備文件名是關鍵敏感,我檢查了兩次。我的問題是要明白爲什麼它可以在模擬器上正常工作,並在設備上返回空JSON數據。非常感謝!從文件中讀取JSON數據Swift 2.0在模擬器上工作,但不在設備上,返回json null
func writeJsonData() {
let file = "/settings.json"
if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
let path = dir.stringByAppendingPathComponent(file);
let json = ["val1":1, "val2":2]
self.jsonToNSData(json)
if let file = NSFileHandle(forWritingAtPath:path) {
file.writeData(jsonToNSData(json)!)
}
}
self.readJsonData()
}
func readJsonData() {
let file = "/settings.json"
if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
let path = dir.stringByAppendingPathComponent(file);
if let data = NSData(contentsOfFile: path as String) {
let json = JSON(data: data)
print(json) // !!!!!!!!!!!
if json != JSON.null {
let val1 = json["val1"].int!
let val2 = json["val2"].int!
}
}
}
}
問題是在寫入數據時,corect方法是:
func writeJsonData() {
let file = "file.json"
if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
let path = dir.stringByAppendingPathComponent(file);
let json: JSON = ["val1":val1 as Int, "val2":val2 as Int]
let str = json.description
let data = str.dataUsingEncoding(NSUTF8StringEncoding)!
if let file = NSFileHandle(forWritingAtPath:path) {
file.writeData(data)
}
}
}
謝謝! 實際上,我嘗試沒有斜槓,問題是其他地方我猜,因爲我能夠從mainBundle讀取數據,並在模擬器上甚至以正確的json格式將數據寫入文件它工作得很好,我的問題是在設備。 writeJsonData函數file.writeData()不返回任何錯誤。更多,從mainBundle,我能夠讀取數據: let path = NSBundle.mainBundle()。pathForResource(「settings」,ofType:「json」)if let data = NSData(contentsOfFile:path!){let json = JSON(數據:數據)如果json!= JSON.null {//做的東西}} –
再次謝謝@Jeff,問題是在某種程度上,我只是做文件的副本和重命名它!!!):哦,它開始在設備上正常工作,我很抱歉讓你失去你的時間。 謝謝;) –