我想将JSON序列化为核心数据模型对象,然后来回进行。我正在从RestKIT切换到Alamofire和Swifty JSON。我知道有一些图书馆提供这种服务,但我想知道如何在本地做到这一点?
以下是核心数据设置:
事件+CoreDataProperties.swift
import Foundation
import CoreData
extension Event {
@NSManaged var id: NSNumber?
@NSManaged var name: String?
@NSManaged var realRame: String?
@NSManaged var notes: NSSet?
}
事件.swift
import Foundation
import CoreData
class Event: NSManagedObject {
// Insert code here to add functionality to your managed object subclass
}
Notes+CoreDataProperties.swift注释+CoreDataProperties.swift
import Foundation
import CoreData
extension Notes {
@NSManaged var id: NSNumber?
@NSManaged var name: String?
@NSManaged var event: Event?
}
票据.swift
导入基础
导入CoreData
课堂笔记: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
格式的数据。代码示例将非常感谢。
最佳答案
添加新的类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 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)")
}