Почему добавление двойного атрибута к объекту CoreData вызывает NSInternalInconsistencyExceptions для конфликтов свойств в удаленно связанных объектах? - PullRequest
1 голос
/ 04 марта 2020

Недавно мы решили добавить несколько необязательных атрибутов двойного типа (с именами last7, last30 и last60) к нашей сущности Product CoreData, но это вызывает NSInternalInconsistencyException:

*** Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Свойство с именем« sortKey »в сущности« Комментарий »конфликтует со свойством, унаследованным от родительской сущности« ChatItem »'

Comment является подклассом ChatItem, а sortKey является атрибутом String, объявленным в ChatItem, унаследованным Comment. Comment имеет индекс выборки для свойства sortKey; удаление этого не решает проблему.

Screenshot of Comment's Fetch Index Elements, including sortKey

Как вы можете видеть на скриншоте этого соединителя, Product s тангенциально связаны с этими двумя классами. через сущность Event; каждый Product имеет число Event с, а каждый Event имеет число ChatItem с. На практике большинство из этих ChatItem относятся к подклассу Comment.

Screenshot of CoreData Entity Connector View

Пометка новых свойств как "переходные" решает проблему сбоя , но не сохраняет данные в CoreData, что является обязательным требованием для этих значений.

Мы заметили, что эта проблема не возникает при чистой установке, поэтому мы предполагаем, что она каким-то образом связана с миграциями. Основываясь на принятом ответе на этот очень похожий вопрос StackOverflow ( Предотвращение CoreData cra sh для обновления пользователей ), мы убедились, что мы включили облегченные миграции:

let options = [
  NSMigratePersistentStoresAutomaticallyOption: true,
  NSInferMappingModelAutomaticallyOption: true,
  NSSQLiteAnalyzeOption: true,
  NSSQLiteManualVacuumOption: true
]
store.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: self.storeURL, options: options)

Мы путать, потому что собственность, которая якобы вызывает проблему, не является частью объекта, который мы меняем; что нам не хватает?

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