Swift 2:将JSON本地序列化为核心数据模型对象

时间:2015-11-28 04:56:18

标签: json swift nsjsonserialization swifty-json

我想将JSON序列化为核心数据模型对象,来回。我正在从RestKIT切换到Alamofire和Swifty JSON。我知道有些库可以提供,但我想知道如何在本地进行操作?

以下是核心数据设置:

enter image description here

事件+ CoreDataProperties.swift

import Foundation
import CoreData

extension Event {

    @NSManaged var id: NSNumber?
    @NSManaged var name: String?
    @NSManaged var realRame: String?
    @NSManaged var notes: NSSet?

}

Event.swift

import Foundation
import CoreData

class Event: NSManagedObject {
// Insert code here to add functionality to your managed object subclass
}

注释+ CoreDataProperties.swift

import Foundation
import CoreData

extension Notes {

    @NSManaged var id: NSNumber?
    @NSManaged var name: String?
    @NSManaged var event: Event?

}

Notes.swift

导入基金会 导入CoreData

class Notes:NSManagedObject { //在此处插入代码以向托管对象子类添加功能 }

以下是JSON:

{
    "id": "5555",
    "name": "Superman",
    "realName": "Clark Kent",
    "notes": [
        {
            "id": "2",
            "name": "Order Flowers"
        },
        {
            "id": "3",
            "name": "Pick up Laundry"
        }
        {
            "id": "4",
            "name": "Get Chinese Food"
        },
    ]
}

获取JSON的代码:

Alamofire.request(fetchData(param)).responseJSON { (response) in

        switch response.result {
        case .Success:
            if let value = response.result.value {
                let json = JSON(value)
            }
        case .Failure(let error):
            print("Request failed with error: \(error)")
        }
    }

问题:我不确定从哪里开始。 NSJSONSerialization似乎想要NSData格式的数据。

代码示例将不胜感激。

1 个答案:

答案 0 :(得分:0)

添加新类DBManager:

class DBManager: NSObject {
var managedObjectContext:NSManagedObjectContext!
var managedObjectModel:NSManagedObjectModel!

func insertData(jsonObj: AnyObject)  {
            let entity =  NSEntityDescription.entity(forEntityName: "Event",
                                                     in:managedObjectContext)
            let obj = NSManagedObject(entity: entity!,
                                           insertInto: managedObjectContext)

            obj.setValue(String((jsonObj.value(forKey: "id"))!)  , forKey: "id")

....

继续设置其他属性的值。

在AppDelegate中声明此var:

var objDb = DBManager()

添加此

switch response.result {
        case .Success:
            if let value = response.result.value {
                let json = JSON(value)

                let anyObjects: AnyObject = json as! AnyObject
                let appDelegate = UIApplication.shared().delegate as! AppDelegate
                appDelegate.objDb.insertData(jsonObj: anyObjects)
            }
        case .Failure(let error):
            print("Request failed with error: \(error)")
        }