Я пытаюсь выполнить пользовательскую миграцию, следуя инструкциям, найденным здесь, изменяя имя и тип атрибута, но, похоже, сопоставление не выполняется.
Старая модель имеет имя атрибута «roundDrill», которое является логическим значением. В новой модели это удалено и добавлен новый атрибут «drillType», который представляет собой строку.
У меня есть модель сопоставления под названием «V2V3.xcmappingmodel», в которой объект имеет собственный набор политик «Diamond_Painting_Logbok.V2V3». Новый атрибут имеет значение «FUNCTION ($entityPolicy, «roundToType:», $source.roundDrill)».
В "V2V3.swift" у меня есть код ниже
import UIKit
import CoreData
class V2V3: NSEntityMigrationPolicy {
func roundToType(isRound:NSNumber) -> String {
NSLog("Round: \(isRound)")
if isRound.boolValue {
return "Round"
} else {
return "Square"
}
}
}
Когда я распечатываю значение DrillType, я получаю ноль. NSLog функции вообще не печатается. Если я изменю имя пользовательской политики, это не даст мне ошибки, поэтому будет выглядеть так, как будто оно полностью игнорируется.
Политика есть и она правильно названа.
Вы пытались добавить знак @objc, как в ответе noobular, в инструкциях, на которые вы ссылались? Этого нет в коде, который вы разместили.
Пробовал и с ним и без, разницы никакой. Даже если я намеренно сделаю опечатку в имени метода, никакой ошибки не возникнет.





Итак, я нашел причину проблемы после разговора с Apple, потому что у меня нет модели от V1 до V2, только от V2 до V3. Без этого все модели отображения игнорируются,
Они также сказали, что сопоставление работает неправильно, поскольку оно падает с «неопознанным селектором, отправленным в экземпляр», хотя это правильно, это ошибка.
Они посоветовали использовать createDestinationInstances в качестве обходного пути, поэтому нужно выяснить это.
Реализация вашей пользовательской политики будет проигнорирована, если вы пропустите шаг 5 в инструкциях Тома Харрингтона, на которые вы ссылались. Или, может быть, вы ввели свое имя класса пользовательской политики в инспекторе атрибутов неправильного объекта. Пожалуйста, проверьте это.