Core Data удаляет данные после перезапуска приложения

Я изменил свою структуру и сделал миграцию (создал новую Модель), данные добавляются и отображаются, все работает нормально, но когда я перезагружаю приложение, данные ядра пусты, в чем проблема?

  static func saveToCoreData(_ words: Words?){

    DispatchQueue.main.async {

        coreDataResult(data: [words?.word, words?.translation], completion: { (result, taskObject, context) in
            do {
                let fetchedEntities = try context.fetch(result) as! [Favorite]
                if let _ = fetchedEntities.first?.word {
                    print("the element already have in coreData")
                } else {

                    taskObject?.setValue(words?.word, forKey: "word")
                    taskObject?.setValue(words?.translation, forKey: "translation")
                    taskObject?.setValue(words?.descript, forKey: "wordDesc")
                    taskObject?.setValue(words?.translDesc, forKey: "translDesc")

                    do {
                        try context.save()
                    } catch {
                        print(error)
                    }
                }
            } catch {}
        })

    }

}

static func coreDataResult(data: [[String?]?]?, completion: @escaping (NSFetchRequest<NSFetchRequestResult>, Favorite?, NSManagedObjectContext) -> ()){

    guard let w = data?.first, let word = w, let t = data?.last, let transl = t else { return }

    DispatchQueue.main.async {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.persistentContainer.viewContext
        guard let entity = NSEntityDescription.entity(forEntityName: "Favorite", in: context) else { return }
        guard let taskObject = NSManagedObject(entity: entity, insertInto: context) as? Favorite else { return }

        let predicate = NSPredicate(format: "word == %@", word)
        let predicate2 = NSPredicate(format: "translation == %@", transl)
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Favorite")
        let andPredicate = NSCompoundPredicate(type: .and, subpredicates: [predicate, predicate2])

        fetchRequest.predicate = andPredicate
        completion(fetchRequest, taskObject, context)
    }

}

старые атрибутыCore Data удаляет данные после перезапуска приложения

новые атрибутыCore Data удаляет данные после перезапуска приложения

новая модель
Core Data удаляет данные после перезапуска приложения

Вы изменили тип данных атрибута «слово» со строки на трансформируемый. Облегченная миграция не может сделать это автоматически. Вам нужно сделать это вручную.

MartinM 13.03.2019 15:49

Вам нужно будет написать миграционную политику, судя по всему.

Sean Lintern 13.03.2019 15:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

я решил это

этот ответ помог мне - https://stackoverflow.com/a/40662940/8070211

  1. создать модель (команда + п -> Модель отображения -> выбрать старую модель -> выбрать новую модель -> добавить имя и создать)
  2. создать подкласс NSEntityMigrationPolicy

    class FavoriteEntityMigrationPolicy: NSEntityMigrationPolicy {
    
       @objc func typeFor(word:String) -> [String] {
           return [word]
       }
    
    }
    
  3. выберите модель -> выбрать объект -> добавить подкласс в пользовательскую политику

  4. выберите модель -> выбрать сущность -> выберите выражение значения -> ДобавитьFUNCTION($entityPolicy, "typeForWord:" , $source.word)

  5. готово

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