2015-09-27 59 views
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) 
      } 
     } 
    } 

回答

1

let file = "/settings.json"不會在設備上工作。

你需要看看NSBundle(我會更新這個帖子在一兩分鐘的時候,我可以拉你一些示例代碼)

我只有在此刻目標C代碼 - 但它應該是相同:

NSBundle* myBundle = [NSBundle bundleWithIdentifier:@"org.mitre.EGM96GeoidCalculator"]; 
NSString *path2 = [myBundle pathForResource:@"EGM96" ofType:@""]; 

你需要迅速做什麼 - 等類似(看到這個帖子:Reading in a JSON File Using Swift

if let path = NSBundle.mainBundle().pathForResource("test", ofType: "json") 
{ 
    if let jsonData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil) 
    { 
     if let jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary 
     { 
      if let persons : NSArray = jsonResult["person"] as? NSArray 
      { 
       // Do stuff 
      } 
     } 
    } 
} 

現在,如果你是在一個框架做的事情 - 或者你不想訪問mainBundle,而是使用框架標識符的包。

+0

謝謝! 實際上,我嘗試沒有斜槓,問題是其他地方我猜,因爲我能夠從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 {//做的東西}} –

+0

再次謝謝@Jeff,問題是在某種程度上,我只是做文件的副本和重命名它!!!):哦,它開始在設備上正常工作,我很抱歉讓你失去你的時間。 謝謝;) –

相關問題