Ответ 1
Короткий ответ:
Основная проблема, скорее всего, вызвана стандартом sqlite. Я не уверен в этом. Как бы то ни было, очень вероятно, что это из-за ограничений sqlite. Я нашел несколько сообщений в Интернете, где у людей были проблемы с несколькими ограничениями на одну таблицу, и это, скорее всего, причина, по которой работает обходной стол для двух таблиц.
Длинный ответ:
Это довольно поздно, но я надеюсь, что это все равно поможет.
Это происходит, когда ваш Entity имеет уникальное ограничение и обязательное отношение. Я предполагаю, что это связано с добавлением уникальных ограничений поведения в iOS 9.0. Однако вы можете решить это двумя способами:
Вы удаляете уникальное ограничение или устанавливаете отношение опционально. Вы можете обрабатывать необязательное отношение в коде. Но это не будет хорошим решением.
ИЛИ
Вы можете использовать обходной путь. У вас могут быть оба. Вы можете создать суперкласс с уникальным ограничением. Однако это тоже не будет работать без проблем.
Пусть у вас есть три объекта. A, B и C.
A - ваш суперкласс, а B - подкласс класса A, а C - подкласс класса A. A имеет уникальное ограничение на свойство primaryKey. При сохранении экземпляров B и C вы не можете иметь B и C с одним и тем же primaryKey. Потому что CoreData будет управлять как A.
Вы можете изменить A, чтобы иметь два свойства:
- int: originalPrimaryKey (нет уникального ограничения)
- string: primaryKey (уникальное ограничение)
Теперь вы можете сопоставить свои первичныеKeys с оригиналомPrimaryKey, а при установке оригиналаPrimaryKey вы можете установить для свойства primaryKey строки значение CLASS_NAME. {originalPrimaryKey}. Это позволит вам иметь поведение, которого вы ожидаете. Но вы должны добавить обходной путь для primaryKeys.