Swift 2:将 JSON 原生序列化为核心数据模型对象
Posted
技术标签:
【中文标题】Swift 2:将 JSON 原生序列化为核心数据模型对象【英文标题】:Swift 2: Natively serialize JSON to Core Data Model Objects 【发布时间】:2015-11-28 04:56:18 【问题描述】:我想来回将 JSON 序列化为核心数据模型对象。我正在从 RestKIT 切换到 Alamofire 和 Swifty JSON。我知道有提供该功能的库,但我想知道如何在本地实现它?
以下是核心数据设置:
Event+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
Notes+CoreDataProperties.swift
import Foundation
import CoreData
extension Notes
@NSManaged var id: NSNumber?
@NSManaged var name: String?
@NSManaged var event: Event?
Notes.swift
导入基础 导入核心数据
类注释: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
格式的数据。
代码示例将不胜感激。
【问题讨论】:
如果您收到 JSON 格式的响应,那么您可以直接将其存储在 NSMutableDictionary 中并使用键值对访问值。为什么需要使用 NSJSONSerialization? 我正在使用 SwiftyJSON 将 JSON 转换为对象。我如何返回单词? 【参考方案1】:添加新类 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)")
【讨论】:
以上是关于Swift 2:将 JSON 原生序列化为核心数据模型对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 Codable 序列化为 JSON 时的 Swift 字符串转义
Restkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON