Похоже, что CoreData теряет атрибуты?

#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, эмулятор совсем запутался. Извлеченный урок — всегда стирайте эмулятор, если я делаю большие изменения в проекте!