Ошибка: «этот класс не совместим со значением ключа» - для любого ключа - PullRequest
0 голосов
/ 27 июня 2019

Я сохраняю объект в модели Core Data, но получаю, что ключ не совместим с кодом для любого ключа.

Я пытался инвертировать порядки клавиш, но я получаю за это все, я пытался изменить имя сущности, но не сработало.

        let mediaEntity = NSEntityDescription.entity(forEntityName: 
"Media", in: managedContext)
        mediaEntity?.setValue(showMediaModel.popularity, forKey: "popularity")
        mediaEntity?.setValue(showMediaModel.title, forKey: "title")
        mediaEntity?.setValue(showMediaModel.type.rawValue, forKey: "type")
        mediaEntity?.setValue(showMediaModel.id, forKey: "id")

        do {
            try managedContext.save()
        } catch let error as NSError {
            print("Could not save. \(error), \(error.userInfo)")
        }

Основная модель данных:

core data model

Подробная ошибка сообщения:

Terminating app due to uncaught exception 'NSUnknownKeyException', 
reason: '[<NSEntityDescription 0x6000008c02c0> 
setValue:forUndefinedKey:]: this class is not key value coding- 
compliant for the key popularity.'

Я добавил основные данные после запуска проекта, следуя этому руководству: https://welcm.uk/blog/adding-core-data-to-an-existing-project-in-xcode-10-swift-4

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Я забыл создать объект.

if let mediaEntity = NSEntityDescription.entity(forEntityName: "Media", in: managedContext) {
    let newEntity = NSManagedObject(entity: mediaEntity, insertInto: managedContext)
    newEntity.setValue(showMediaModel.popularity, forKey: "popularity")
    newEntity.setValue(showMediaModel.title, forKey: "title")
    newEntity.setValue(showMediaModel.type.rawValue, forKey: "type")
    newEntity.setValue(showMediaModel.id, forKey: "id")

    do {
        try managedContext.save()
    } catch let error as NSError {
        print("Could not save. \(error), \(error.userInfo)")
    }
}
0 голосов
/ 27 июня 2019

Проверьте ваш файл xcdatamodel и убедитесь, что ваше написание слова «популярность» совпадает с написанием в строке, сообщающей об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...