首页 > 解决方案 > 如何使用 SwiftyJSON 初始化“抽象实体”CoreDataClass

问题描述

我的核心数据模型中有一个名为“用户”的抽象实体。我想初始化这个实体的一个实例而不将它保存到数据库中。因此我将其设置为抽象实体。

我希望这个实体类符合 JSONAble,因为我正在使用 SwiftyJSON 来简化事情。

为了符合要求,我必须实现 init 方法required convenience init?(dict: [String : Any])

这是该方法的样子:

required convenience public init?(dict: [String : Any]) {
    let decoder = JSONDecoder()

    guard let codingUserInfoKeyManagedObjectContext = CodingUserInfoKey.managedObjectContext,
        let managedObjectContext = decoder.userInfo[codingUserInfoKeyManagedObjectContext] as? NSManagedObjectContext,
        let entity = NSEntityDescription.entity(forEntityName: "User", in: managedObjectContext) else {
        fatalError("Failed to decode User")
    }

    self.init(entity: entity, insertInto: nil)

    let json = JSON(dict)
    let userDictionary = json["user"]

    id = userDictionary["id"].int32Value
    phoneCode = userDictionary["countryCode"].stringValue
    mobileNumber = userDictionary["mobileNumber"].stringValue
    firstName = userDictionary["firstName"].stringValue
    lastName = userDictionary["lastName"].stringValue
    avatar = userDictionary["avatar"].stringValue
    userRole = userDictionary["userRole"].int32Value

    let dateString = userDictionary["dateAdded"].stringValue
    if let date = dateString.asDate() {
        dateCreated = date
    }
}

运行此程序后,它无法解码用户并遇到我已经到位的 fatalCrash。

我仍然有点不确定抽象实体是如何被初始化而不被存储到数据库中的,也许如果我能找出为抽象实体设置 CoreDataClass 的正确方法,我就能找出我哪里出错了。

标签: jsonswiftcore-dataswifty-jsoncodable

解决方案


推荐阅读