我遇到了问题
我从CoreData Entity创建一个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 :(得分: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项目的数组。