Я работаю с классом, который является NSManagedObject
и Codable
.Это Feed
и имеет кратное Albums
.Я хочу упорядоченный список Albums
, но Core Data вынуждает меня использовать Set, который не упорядочен.Я могу использовать NSOrderedSet
, но он не работает с Codable
.Что было бы лучшим способом получить упорядоченный список в Core Data.Ниже модель, которую я пытаюсь заставить работать.
public class Feed: NSManagedObject, Codable {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Feed> {
return NSFetchRequest<Feed>(entityName: "Feed")
}
@NSManaged public var title: String
@NSManaged public var albums: Set<Album>
@NSManaged public var feedContainer: FeedContainer?
enum CodingKeys: String, CodingKey {
case title
case albums = "results"
case feedContainer
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(title, forKey: .title)
try container.encode(albums, forKey: .albums)
}
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: "Feed", in: managedObjectContext) else { fatalError("Failed to decode Subject!") }
self.init(entity: entity, insertInto: managedObjectContext)
let container = try decoder.container(keyedBy: CodingKeys.self)
title = try container.decodeIfPresent(String.self, forKey: .title) ?? ""
albums = try container.decodeIfPresent(Set<Album>.self, forKey: .albums) ?? []
}
}