Вы пробовали отказаться от своего многопоточного кода, чтобы посмотреть, работает ли он?Я предполагаю, что вы смешиваете потоки здесь и получаете доступ к MOC / сохраняете их из разных потоков.Управление потоками вручную - это PITA, попробуйте переключиться на Grand Central Dispatch .
Я бы также дал вашему главному MOC собственный аксессор, чтобы вы могли убедиться, что он не вызывается из фоновых потоков, и есть несколько методов: - (NSManagedObjectContext*)newBackgroundMOC;
и - (void)saveBackgroundMOC:(NSManagedObjectContext*)context;
для быстрого создания и сохранения MOC из фонаочереди / потоки:
dispatch_async(my_queue, ^{
NSManagedObjectContext *context = [self newBackgroundMOC]; // create context, setup didSave notification to merge with main MOC, etc
// modify context
[self saveBackgroundMOC:context]; // main MOC gets updated
});
Миграция на GCD - это немного работы, но в долгосрочной перспективе вы увидите, что работать с ней гораздо приятнее.Само собой разумеется, что это также самый современный и рекомендуемый Apple способ работы с потоками.