【问题标题】:How to store JSON response in Core Data?如何在 Core Data 中存储 JSON 响应?
【发布时间】:2014-05-07 10:36:15
【问题描述】:

我有一个核心数据对象。

作为一个相对缺乏经验的 iPhone 开发人员,我很好奇是否有人可以推荐一种方法,以及适用于 iPhone 的 JSON 实现,这将允许我将 JSON 响应存储为 Core Data 对象。

我从 JSON 响应中获得 5 条记录(字典)。我需要将它们存储在 Core Data 中,并在必要时检索它们。

我已经搜索了关于这一点的教程/代码示例,但未成功,因此我们将不胜感激。

【问题讨论】:

  • 在 coredata 中使用 Transformable 数据类型。

标签: ios json core-data


【解决方案1】:
【解决方案2】:

将您的核心数据属性设置为可转换。然后使用这个扩展:

extension NSObject {
    static func storeJSON(dataToStore: [String: AnyObject], completion: (data: NSData?) -> Void) {
        do {
            let data = try NSJSONSerialization.dataWithJSONObject(dataToStore, options: [])
            completion(data: data)
        } catch let error as NSError {
            print("NSJSONSerialization Error: \(error)")
            completion(data: nil)
        }
    }

    func retrieveJSON(completion: (json: JSON) -> Void) {
        if let data = self as? NSData {
            do {
                let nsJSON = try NSJSONSerialization.JSONObjectWithData(data, options: [])
                completion(json: JSON(nsJSON))
            } catch let error as NSError {
                print("NSJSONSerialization Error: \(error)")
                completion(json: nil)
            }
        }
    }
}

如果您不使用 SwiftJSON,那么只需使用:

extension NSObject {
    static func storeJSON(dataToStore: [String: AnyObject], completion: (data: NSData?) -> Void) {
        do {
            let data = try NSJSONSerialization.dataWithJSONObject(dataToStore, options: [])
            completion(data: data)
        } catch let error as NSError {
            print("NSJSONSerialization Error: \(error)")
            completion(data: nil)
        }
    }

    func retrieveJSON(completion: (json: AnyObject?) -> Void) {
        if let data = self as? NSData {
            do {
                let nsJSON = try NSJSONSerialization.JSONObjectWithData(data, options: [])
                completion(json: nsJSON)
            } catch let error as NSError {
                print("NSJSONSerialization Error: \(error)")
                completion(json: nil)
            }
        }
    }
}

将 user.jsonTest 用作核心数据中的可转换的示例:

func testThis() {
    makeSaveData() {
        self.user.jsonTest!.retrieveJSON() {
            json in
            print("json: \(json)")
        }
    }
}

func makeSaveData(completion: () -> Void) {
    var solarResourceDic: [String: String] = [:]
    var srDics: [[String: String]!] = []

    for i in 0..<5 {
        solarResourceDic = [:]
        solarResourceDic["system_capacity"] = "\(i)"
        solarResourceDic["azimuth"] = "\(i + 1)"
        solarResourceDic["tilt"] = "\(i + 2)"
        solarResourceDic["array_type"] = "\(i + 3)"
        solarResourceDic["module_type"] = "\(i + 4)"
        solarResourceDic["losses"] = "\(i + 5)"
        srDics.append(solarResourceDic)
    }
    let dic = ["Solar Resource": srDics]

    NSObject.storeJSON(dic) {
        data in
        if data != nil {
            self.user.jsonTest = data
            appDelegate.coreData.saveContext()
            completion()
        } else {
            print("Error storing data")
        }
    }
}

【讨论】:

    【解决方案3】:

    您可以关注this 很棒的教程,该教程展示了如何将 json 保存到核心数据。一般来说,您需要学习以下内容:如何解析 json 提要(它将生成带有已解析项目的 NSDictionaries)以及如何将此字典保存到您的持久存储中。本教程涵盖两者。

    【讨论】:

    • 一般来说很棒的 iOS 教程网站。
    • 我对这项技术很陌生。我不知道如何检查数据是否存储在持久存储中。请也参考我。此外,只要 json api 出现,数据就应该删除和更新命中。
    • Core Data 是 iOS 中的一个巨大篇章。搜索删除和更新核心数据将为您提供您正在寻找的答案。此外,Apple 文档始终是开始学习新事物的好地方。
    【解决方案4】:

    我知道这很旧,但是有一个名为 Sync 的库,它可以将 json 保存到 DB

    Sync 可以简化您解析 JSON 响应并将其输入 Core Data 的日常工作。它使用约定优于配置的范例来促进您的工作流程。 将 JSON 同步到 Core Data 是一项重复性任务,通常需要添加大量样板代码。映射属性、映射关系、差异插入、删除和更新通常是在应用程序之间不会改变的任务。考虑到这一点,我们接受了将其抽象为库的挑战。 Sync 使用您的 Core Data 模型的知识来推断您的 JSON 和 Core Data 之间的所有映射,一旦您使用它,就会感觉如此明显,以至于您会想知道为什么以前不这样做。 p>

    链接:-Sync

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多