Hello I'm trying to write and read some data JSON format from file in my app. I know that on device filename is key sensitive and i checked it twice. My problem is to understand why it works fine on simulator and return null JSON data on device.Thank you a lot!
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!
}
}
}
}
the problem is in writing data, the corect way is:
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)
}
}
}