У меня конфликт при сохранении группы NSManagedObjects через внешний поток.Для начала я могу сказать вам следующее:
- Я использую отдельный MOC для каждого потока.
- MOC используют один и тот же постоянный координатор хранилища.
- Вероятно, что внешний поток изменяет одну или несколько записей, которые я сохраняю.
ОК, так что с этим, вот что я делаю.
В моем внешнем потоке я выполняю некоторые вычисления и обновляю одно значение в группе управляемых объектов.Я делаю это, просматривая объект в постоянном хранилище по первичному ключу, изменяя одно десятичное свойство, а затем вызывая save для сгустка сразу.
Между тем, я считаю, что основной потоквыполняя свое собственное обновление.
Когда мой внешний поток делает большую экономию в контексте управляемого объекта, я получаю исключение, указывающее большое количество конфликтов.Кажется, что все конфликты связаны с отдельными отношениями в каждой записи.Хотя управляемый объект в постоянном хранилище и моем внешнем потоке совместно использует один и тот же ObjectID для этого отношения, они не разделяют один и тот же указатель.Исходя из того, что я вижу, это единственное, что отличается между объектами в моем выводе отладки NSMergeConflict.
Для меня имеет смысл, почему два объекта имеют отношения с разными указателями - они находятся в разных потоках.Однако, как я понимаю из документации Apple, единственное, что кэшируется при первом извлечении объекта из постоянного хранилища, это глобальные идентификаторы.Таким образом, можно подумать, что когда я запускаю save во внешнем потоке MOC, он сравнивает ObjectID, видит, что они одинаковы, и пропускает все это.
Итак, кто-нибудь может сказать мне, почему яполучить конфликт?