如何使用自定义类型解码CoreData模型?

时间:2019-12-07 21:11:14

标签: swift xcode model codable jsondecoder

让我澄清一下。

我有一个WeatherWrapper类,它子类化NSManagedObject并符合Codable协议。通常,我想解码WeatherWrapper,然后转到CurrentWeather来访问其属性,例如温度,摘要和时间。

我的问题是如何解码currentWeather?到目前为止,我只是这样做了,只是不认为那是正确的。原因我不断收到解码错误,但如果忽略该错误,则至少可以解码WeatherWrapper。

enter image description here

enter image description here

到目前为止,这是我所拥有的, CurrentWeather 类型还具有一个类,该类继承了 NSManagedObject ,并符合 Codable 协议。

@objc(WeatherWrapper)
public class WeatherWrapper: NSManagedObject, Codable {

    @NSManaged public var latitude: Double
    @NSManaged public var longitude: Double
    @NSManaged public var timezone: String
    @NSManaged public var currentWeather: CurrentWeather

    enum CodingKeys: String, CodingKey {
        case latitude
        case longitude
        case timezone
        case currentWeather = "currently"
    }

    public required convenience init(from decoder: Decoder) throws {
        guard
            let contextUserInfoKey = CodingUserInfoKey.context,
            let managedObjectContext = decoder.userInfo[contextUserInfoKey] as? NSManagedObjectContext,
            let entity = NSEntityDescription.entity(forEntityName: "WeatherWrapper", in: managedObjectContext) else {
                fatalError("Could not retrieve context")
        }

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

        let container = try decoder.container(keyedBy: CodingKeys.self)

        latitude = try container.decode(Double.self, forKey: .latitude)
        longitude = try container.decode(Double.self, forKey: .longitude)
        timezone = try container.decode(String.self, forKey: .timezone)
        currentWeather = try container.decode(CurrentWeather.self, forKey: .currentWeather)
    }
}

我是否更改了Weather.xcdatamodelId中的某些内容,因为我有两个实体, WeatherWrapper CurrentWeather

0 个答案:

没有答案