CoreData & Codable: избежать дублирования - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть подкласс NSManagedObject (CarBrand) только с двумя свойствами:

public class CarBrand: NSManagedObject, CDCodable {
    @NSManaged public var id: Int64
    @NSManaged public var name: String
}

Также я использую протокол Codable для анализа его из JSON ответа сервера.В случае, если ответ соответствует (или почти совпадает) моей модели - нет проблем с дублированием объекта (у меня есть статический метод для этого класса, который возвращает объект из CoreData или создает новый и возвращает его).

Но один из ответов имеет следующую структуру:

class CarBrandsResponse: Codable {
    let offset: Int
    let count: Int
    let results: [CarBrand]
}

В этом случае я не могу найти решение для вызова этого статического метода для каждого CarBrand, потому что если я напишу

self.results = try container.decode([CarBrand].self, forKey: .results)

Он вызывает init(из :) в CarBrand для каждой записи, это означает дублирование сущности ...

Я пытался повторить поведение Decodable, но там я не нашел подходящего API-метода для этого.(unkeyedContainer(), nestedContainer(), etc.)

Надеюсь, вы поможете мне решить эту проблему или предложите другой способ избежать дублирования.

Спасибо.

...