【问题标题】:Write NSData in NSHomeDirectory在 NSHomeDirectory 中写入 NSData
【发布时间】:2015-06-09 15:48:25
【问题描述】:

我遇到了一个问题

我从 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条记录,不是全部。

我的错在哪里?

【问题讨论】:

    标签: json swift core-data nsdata


    【解决方案1】:

    每次通过时,您都将卡数据的一个实例保存到“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}]
    

    该行将创建一个字典,其中键是“卡片”,值是 allCredits 中作为 json 的项目的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多