2015-01-26 2 views
2

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

После удаления я извлекаю эти сохраненные объекты и обновляю их информацию, используя JSON, и когда я сохраняю managedContext, приложение выдает печать «Невозможно восстановить из-за оптимистической блокировки».

Я искал, но я не нашел никакой информации о том, что означает это сообщение, любая идея?

Спасибо.

ответ

2

Первый результат Google, документация от Apple. (Где именно вы были «глядя»?)

Problem: You see the error message, "Could not merge changes".

Cause: Two different managed object contexts tried to change the same data. This is also known as an optimistic locking failure.

Remedy: Either set a merge policy on the context, or manually (programmatically) resolve the failure. You can retrieve the currently committed values for an object using committedValuesForKeys:, and you can re-fault the object (so that when it is next accessed its data values are retrieved from its persistent store) using refreshObject:mergeChanges:.

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

+0

Это вещь, я не имею 2 контексты удалось, и я уже настроил политику «NSMergeByPropertyObjectTrumpMergePolicy» – subharb

+0

Может быть, вы будете работать объекты, * обновления * в вашей рутине, которая обрабатывает информацию JSON. Это потенциально может быть в другом потоке, поэтому вы должны создать дочерний контекст для обработки обновления и затем перейти к родительскому контексту. Концептуально это все та же проблема. – Mundi

+0

Спасибо, я попробую. – subharb

0

У меня есть эта ошибка из-за попытки сохранить модель, которая нарушает ограничение уникальности в базе данных. Следующий sql выполняется много раз (1005) в/с одним контекстом до тех пор, пока он не завершится с «CoreData: error: fatal: Не удалось восстановить из-за оптимистической блокировки». сообщение:

2016-08-10 23:20:50.613 DtLoad[49506:78762894] CoreData: sql: INSERT INTO ZSAMPLE(Z_PK, Z_ENT, Z_OPT, ZR, ZUSER, ZW) VALUES(?, ?, ?, ?, ?, ?) 
2016-08-10 23:20:50.613 DtLoad[49506:78762894] CoreData: sql: ROLLBACK 
2016-08-10 23:20:50.613 DtLoad[49506:78762894] CoreData: sql: BEGIN EXCLUSIVE 

XCode Version 7.3.1

Смежные вопросы