#ios #swift #database #core-data
Вопрос:
У меня есть сущность с именем Мотки, которая, похоже, теряет два атрибута, и я не могу понять, почему:
func insertSkein(brand: String, code: String, type: String, description: String, discontinued: Bool) throws {
let sk = Skeins(context: self.context)
sk.id = UUID()
sk.brand = brand
sk.code = code
sk.type = type.capitalized
sk.skeindesc = description.capitalized
sk.discontinued = discontinued
self.context.insert(sk)
do{
try self.context.save()
}
catch{
print("error inserting skein: (error)")
}
}
Если я посмотрю на состояние sk в строке вставки, я смогу увидеть:
<Skeins: 0x600002ba1e00> (entity: Skeins; id: 0x6000008ab100 <x-coredata:///Skeins/t9792D8DC-F6B0-4644-BD81-4CC63CE05B0F2>; data: {
brand = TestBrand;
brandcode = TestBrandTestCode;
code = TestCode;
discontinued = 0;
id = "F1C7929C-C271-477D-B12F-0B3A11C13008";
projectSkeins = (
);
sharedSkeinProjects = (
);
Как вы можете видеть, и skeindesc, и тип отсутствуют (оба определенно имеют значения в параметрах), и я не могу найти никакой разницы в том, как строки определены в файле базы данных, поэтому я застрял! Любые предложения были бы великолепны 🙂
Спасибо, Бекки
Комментарии:
1. Внесли ли вы какие-либо изменения в свою основную модель данных? Возможно, вам нужно очистить папку сборки, чтобы не использовалась старая версия.
2. Нет, это было там уже давно — я нашел это только потому, что пишу тесты, и эти два атрибута терпят неудачу, поскольку они не имеют никакого значения/отсутствуют.
3. Вероятно, это не причина вашей проблемы, но звонить не нужно
insert
; вы указали контекст при создании сущности, поэтому она уже вставлена в контекст4. Не уверен, что это актуально, но почему вы делаете
self.context.insert
это, когда объект уже существует в контексте?5. Для такого рода ошибок я предлагаю вам создать новый проект в Xcode и отладить его там. Возможно, скопируйте свой файл .xcdatamodel и посмотрите, сможете ли вы воспроизвести проблему. Возможно, позже добавьте файлы моделей, пока вы не устраните проблему.
Ответ №1:
Спасибо всем за комментарии по этому поводу — потратил несколько дней, разочаровываясь в этом, а затем случайно выбрал другой эмулятор, и он работал нормально. Поэтому лучше всего предположить, что, когда я изменил направление проекта на iOS 14 -> iOS 15, эмулятор совсем запутался. Извлеченный урок — всегда стирайте эмулятор, если я делаю большие изменения в проекте!