Хорошо, у меня очень сложная проблема, которую я потратил несколько дней, чтобы понять, и знаю, что не знаю, как ее исправить.
У меня база данных CoreData обновлена из другого потока с другим контекстом. Моя проблема заключается в том, что иногда NSManagedObjectContextDidSaveNotification событие перекрываются и создают повреждение базы, что приводит к падению. Вот пример:
Thread Main NSFetchResultsController
Update database
Save database NSManagedObjectContextDidSaveNotification1
merge delegate process 1
process 1 done
Update database
Save database NSManagedObjectContextDidSaveNotification2
merge delegate process 2
process 2 done
Update database
Save database NSManagedObjectContextDidSaveNotification3
merge delegate process 3
Update database
Save database NSManagedObjectContextDidSaveNotification4
merge
process 3 done
delegate process 4
CRASH
process 4 done
В этом примере псевдокода process1 и process2 работают без проблем.
но иногда основной поток получает перекрывающееся событие обновления и
у вас process4 начинает читать базу данных до завершения process3.
Есть ли официальный способ справиться с этим? CoreData предлагает решение
в этой ситуации, или я должен использовать NSLock?
Спасибо