如何将@NSManaged 对象类中的变量初始化为 JSON 值?
Posted
技术标签:
【中文标题】如何将@NSManaged 对象类中的变量初始化为 JSON 值?【英文标题】:how to initialise variables in @NSManaged object class as a JSON value? 【发布时间】:2018-06-11 16:47:53 【问题描述】:我想像变量“Item2”类一样初始化“Item”类中的变量
这是“项目”类:-
import UIKit
import CoreData
import SwiftyJSON
class Item: NSManagedObject
@NSManaged var name = String()
@NSManaged var symbol = String()
@NSManaged var checked : Bool = false
@NSManaged var buyPrice = String()
@NSManaged var rank = String()
这是“Item2”类:-
import Foundation
import SwiftyJSON
class Item2 : Codable
var name = String()
var symbol = String()
var checked : Bool = false
var buyPrice = String()
var rank = String()
init(bitJSON: JSON)
self.name = bitJSON["name"].stringValue
self.symbol = bitJSON["symbol"].stringValue
self.buyPrice = bitJSON["price_usd"].stringValue
self.rank = bitJSON["rank"].stringValue
【问题讨论】:
NSManagedObject
实例必须使用 init
方法初始化,该方法将项目插入托管对象上下文中。基本上,Codable
和自定义初始化程序可以在解码器的 userInfo
字典中传递托管对象上下文。
我使“Item”类可编码并从“Item2”类复制/粘贴init方法,但它说“@NSManaged 属性不能有初始值”
这(也)取决于核心数据模型的定义。但是你应该只根据模型声明@NSManaged
属性的类型而没有初始值
@vadian,您是否有将模型用作可编码模型的示例,我们可以将模型用于核心数据保存模型和 json 解析模型?我不想为代码数据实体和单独的模型对象创建自定义子类。我想为两者使用一 (1) 个模型类,它可以子类化可编码和 nsmanagedobject 或任何东西。在我们的旧项目中,我们使用了 2 个模型。在转换之前,我们使用 mapper 方法将 nsmanageobejct 转换为 nsobject(核心数据获取)和 nsobject 转换为 nsmanagedobejct(核心数据保存)。有几天我一直在为这样的例子而苦苦挣扎:(
请看***.com/questions/44450114/…
【参考方案1】:
ManagedObject 不是普通对象。它们是评估数据库的面向对象的方法。托管对象使用上下文来获取它们的所有属性。 managedObject 必须有上下文——没有上下文,它们根本无法工作。
extension Item
static func insert(json:JSON, in context:NSManagedObjectContext) -> Item
let newItem = Item.init(entity: Item.entity(), insertInto:context)
newItem.name = json["name"].stringValue
newItem.symbol = json["symbol"].stringValue
newItem.buyPrice = json["price_usd"].stringValue
newItem.rank = json["rank"].stringValue
请注意有关此方法的两件事:1) 它不假定它知道上下文 - 这是更高级别的工作 - 对于某些应用程序,它只是直接插入到 viewContext 中,对于其他应用程序,它是一个临时背景上下文被建造。并且 2) 它不保存上下文 - 这也不是它的工作 - 可以同时编辑或创建其他对象,它们都应该以事务方式保存。
它可以像这样使用:
persistentContainer.performBackgroundTask (context) in
let newItem = Item.insert(json: json, in: context)
do
try context.save()
catch
// log to you analytic provider
希望这会有所帮助。
【讨论】:
以上是关于如何将@NSManaged 对象类中的变量初始化为 JSON 值?的主要内容,如果未能解决你的问题,请参考以下文章