【问题标题】:How would I encode an NSSet in Swift Xcode?如何在 Swift Xcode 中编码 NSSet?
【发布时间】:2019-12-18 04:10:56
【问题描述】:

我知道在解码时该怎么做,如下所述,但是我将如何进行编码 ?

只需要查看 weatherDetail: NSSet 我删除了其他容器,因为示例不需要。

public class CurrentWeather: NSManagedObject, Codable {

    @NSManaged public var weatherCoordinate: WeatherCoordinate?
    @NSManaged public var weatherDetail: NSSet
    @NSManaged public var temperatureDescription: TemperatureDescription
    @NSManaged public var locationName: String
    @NSManaged public var date: Int32

    enum CodingKeys: String, CodingKey {
        case weatherCoordinate = "coord"
        case weatherDetail = "weather"
        case temperatureDescription = "main"
        case locationName = "name"
        case date = "dt"
    }

    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: "CurrentWeather", in: managedObjectContext) else {
                fatalError("Could not retrieve context")
        }

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

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

        weatherDetail = NSSet(array: try container.decode([WeatherDetail].self, forKey: .weatherDetail))
    }

这里我做错了,但想知道我怎么能解决这个问题。

 public func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
//        NSSet(array: try container.encode(weatherDetail.self, forKey: .weatherDetail))        }

【问题讨论】:

  • 您找到解决方案了吗?

标签: swift xcode core-data model encodable


【解决方案1】:

我找到了一个解决方案,实际上它非常简单。 你需要做的是:

  1. 将您的 NSSet 转换为 WeatherDetail 数组
  2. 对数组进行编码

在你的例子中,这将是:

var container = encoder.container(keyedBy: CodingKeys.self)
let weatherDetailArray = self.weatherDetail.allObjects as? [WeatherDetail]    
try container.encode(weatherDetailArray, forKey: . weatherDetail)

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多