Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Сбой Swift при создании нового атрибута CoreData для существующего объекта

Автор вопроса: Roberto ToniniОтветов: 3

Я пытаюсь программно создать новый атрибут для уже существующей сущности в swift.
Это мой код:

    let model = NSManagedObjectModel()
    var properties = Array<NSAttributeDescription>()
    let remoteURLAttribute = NSAttributeDescription()
    remoteURLAttribute.name = "\(foundArray[indexPath.row]) id"
    remoteURLAttribute.attributeType = .stringAttributeType
    remoteURLAttribute.isOptional = false
    remoteURLAttribute.isIndexed = true
    properties.append(remoteURLAttribute)
    entity?.properties = properties
    model.entities = [entity!]

Приложение всегда вылетает с этой ошибкой:

Завершение работы приложения из-за неперехваченного исключения "NSInternalInconsistencyException", причина: "Невозможно изменить неизменяемую модель".

Как я могу это исправить?

xcodeiosswiftcore-dataswift3

Ответы

Ответ 1 · рейтинг 1 · Tom Harrington

Вы можете изменить модель данных только перед ее использованием для чтения или хранения данных. Он изменяется при первой загрузке, но становится неизменяемым, как только вы используете его для чего-либо, кроме редактирования модели.

Изменение модели таким образом обычно является плохой идеей. Но если это необходимо по какой-либо причине, вы должны сделать это перед загрузкой или сохранением каких-либо данных с помощью модели.

Ответ 2 · рейтинг 1 · eMKa

Модель недоступна для редактирования во время выполнения. См. документацию, параграф Editing Models Programmatically. Вы можете только скопировать его и внести свои изменения.

Ответ 3 · рейтинг -1 · Andy Etheridge

На самом деле я этого не пробовал, но как насчет изменения модели с константы на переменную (т.е. var вместо let).

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы