Как создать объект предыдущей версии NSManagedObjectModel без вызова текущей версии awakeFromInsert?

У меня есть модель данных Core Data с несколькими версиями модели (чтобы разрешить миграцию). Мои сущности имеютcodegenнастройка установлена ​​наManual / none, и у меня есть соответствующие классы в моей кодовой базе, где я подключаюсь к определенным методам, таким какvalidateForUpdate, , и т. д:

      @objc(Book)
class Book: NSManagedObject {
    @NSManaged var title: String

    override func validateForUpdate() throws {
        try super.validateForUpdate()

        try customValidation()
    }
}

Во время миграции старого хранилища мне необходимо загрузить старое хранилище, используя версию старой модели, и выполнить некоторые обновления управляемых объектов. Однако подтверждение со стороныNSManagedObjectclass все еще работает, хотя он был разработан только для работы с последней версией. Это может относиться к атрибутам, которых нет в старой версии, что дает мнеunrecognized selectorошибки.

Пример кода, который я использую для загрузки магазина со старой моделью:

      // book_5 is the name of the older model version
let model = NSManagedObjectModel(contentsOf: Bundle.main.url(forResource: "books_5", withExtension: "momd")!)!

let container = NSPersistentContainer(name: "TestModel", managedObjectModel: model)
let description = NSPersistentStoreDescription(url: storeLocation)
container.persistentStoreDescriptions = [description]

container.loadPersistentStores { _, _ in
    let entity = model.entitiesByName["Book"]!
    let newBook = NSManagedObject(entity: entity, insertInto: container.viewContext)
    newBook.setValue("Test Book", forKey: "title")
    try! container.viewContext.save()
}

При вставке объекта в контекстawakeFromInsertметод запускается, вызывая ошибку, поскольку он ссылается на атрибуты, которые существуют только в самой новой версии модели.

Есть ли способ обойти это? Я чувствую, что это должно быть возможно, потому что манипулирование исходными объектами сущностей в пользовательском сопоставлении сущностей во время тяжеловесной миграции не приводит к той же проблеме.

0 ответов

Другие вопросы по тегам