"NSInternalInconsistencyException" Объекты для конфигурации уже должны быть в модели

Я пытаюсь добавить новую сущность в NSManagedObjectModel в моем подклассе NSIncrementalStore. Я делаю это в методе loadMetadata, но он продолжает выдавать это исключение в последней строке. Смотрите код ниже

"NSInternalInconsistencyException" Объекты для конфигурации уже должны быть в модели

Код

var model:AnyObject=(self.persistentStoreCoordinator?.managedObjectModel.copy())!
var newEntity=NSEntityDescription()
newEntity.name="newEntity"
newEntity.managedObjectClassName="newEntity"

var entities=model.entitiesForConfiguration(self.configurationName)
entities?.append(newEntity)

model.setEntities(entities!, forConfiguration: self.configurationName)

2 ответа

Вы не можете изменить модель после того, как она была добавлена ​​в постоянный координатор хранилища. Вы можете манипулировать моделью только после инициализации и до ее применения к NSPersistentStoreCoordinator,

В документации неясно об этом, но перед звонком setEntities:forConfiguration: устанавливаемые объекты уже должны существовать в модели управляемого объекта entities массив. Это связано с тем, что этот метод фактически назначает существующие объекты в модели конкретной конфигурации.

Решение здесь состоит в том, чтобы сделать изменчивую копию entities массив, добавьте в него ваши сущности, если они не существуют, а затем задайте для массива сущностей модели управляемых объектов неизменную копию измененного массива. После этого вы можете вызвать setEntities:forConfiguration:,

Это стоило бы подать отчет об ошибке радара об этом поведении.

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