gpt4 book ai didi

ios - JSON 的模型类和 Swift 中核心数据的相同类

转载 作者:行者123 更新时间:2023-11-28 08:35:54 25 4
gpt4 key购买 nike

我有带参数的类,例如 Car(NSObject 的子类),我将其用作简单模型:

class Car {
var model: String!

init(json: JSON) {

// ... parse JSON ...
}
}

我可以:

  • 用 init 初始化;
  • 将 JSON 数据解析为该模型;

然后在我的 VC 中使用这个类:添加数据、删除数据等。任何我需要的。

我还想将这个模型保存到核心数据中,但为此我需要其他模型:

class Car: NSManagedObject {
@NSManaged var model: String!
}

这个类我不能用于解析和简单的初始化。

但是,我可以创建跟随初始化器:

class Car: NSManagedObject {
@NSManaged var model: String!

init() {
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let entity = NSEntityDescription.entityForName("Car", inManagedObjectContext: managedContext)

super.init(entity: entity!, insertIntoManagedObjectContext: nil)
}

convenience init(json: JSON) {
self.init()

// ... parse JSON ...
}
}

然后我将像这样使用这个类:

var car = Car()
car.model = "Toyota"

这是正确的解决方案?如何使用一种模型满足所有需求?

最佳答案

只需使用一个NSManagedObject 来表示Car。在那个 NSManagedObject 子类中创建一个名为 populateFromJSON(json:[String:Object]) 的方法然后你的创建只是稍微复杂一点:

let aCar = NSEntityDescription.insertNewObjectForEntityForName("Car", intoManagedObjectContext:context)
aCar.populateFromJSON(myIncomingJSON)

完成。

顺便说一句,调用 super.init(entity: entity!, insertIntoManagedObjectContext: nil) 是错误的,不会产生您正在寻找的结果。

您真的不想覆盖 NSManagedObject 子类上的 init 方法。最好创建一个 populate 方法并使用指定的初始化选项。

关于ios - JSON 的模型类和 Swift 中核心数据的相同类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37719291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com