2015-06-09 53 views
0

我遇到了問題在NSHomeDirectory中寫入NSData

我從CoreData實體創建JSON數據。

// name : String 
// index : String 
// image : NSData 
var asJson : [String:AnyObject]{ 
    return ["name" : name, "index" : index , "image" : "\(image)"] 
} 

總記錄我想將它保存在文件中。

let fetch = NSFetchRequest(entityName: kCreditCardCompanies) 
    let allCredits = ManagedDocument.sharedInstance.managedObjectContext.executeFetchRequest(fetch, error: nil) as! [CreditCardCompanies] 

    for cards in allCredits{ 


     var jsonCard = ["cards" : cards.asJson] 

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {() -> Void in 
      var jsonData = NSJSONSerialization.dataWithJSONObject(jsonCard, options: 
       NSJSONWritingOptions.PrettyPrinted, error: nil)! 
      var path = NSHomeDirectory().stringByAppendingPathComponent("Documents") 
      var directory = path.stringByAppendingPathComponent("creditCard.json") 
      jsonData.writeToFile(directory, atomically: true) 

      println("\(jsonData)") 
     }) 

    } 

在「jsonData」中存在所有記錄,但在文件「creditCard.json」中只保存了1條記錄,並非全部。

我的錯在哪裏?

回答

0

每次通過,您都將卡數據的一個實例保存到「creditCard.json」文件中。 如果你想將所有的牌寫出來成一個看起來像文件:

{ 
"cards": [ 
    {"name": "foo", "index":12, "image": "<hex data>"}, 
    {"name": "bar", "index":13, "image": "<hex data>"} 
] 
} 

那麼你會希望所有的卡片收集到一個數組使其成JSON對象之前,拿出你的for循環和allCredits映射到JSON表示

替換此:

for cards in allCredits{ 
    var jsonCard = ["cards" : cards.asJson] 

與:

let jsonCard = ["cards": allCredits.map {$0.asJson}] 

該行將創建一個字典,其中鍵是「cards」,值是allCredits中作爲json的項的數組。