Это больше вопрос, почему это работает, и это не вопрос...
Я использую CoreData в нескольких потоках. У меня есть два потока, созданных из основных потоков, и оба они выполняют аналогичный вызов:
id observerObject = [notificationCenter addObserverForName:NSManagedObjectContextDidSaveNotification
object:secondManagedObjectContext
queue:nil
usingBlock:^(NSNotification *saveNotification) {
dispatch_async(dispatch_get_main_queue(), ^{
[mainThreadManagedObjectContext mergeChangesFromContextDidSaveNotification:saveNotification];
});
}];
[secondManagedObjectContext save:nil];
[notificationCenter removeObserver:observerObject
name:NSManagedObjectContextDidSaveNotification
object:syncManagedObjectContext];
Кажется, это работает нормально, но раньше я делал это с центром уведомлений и имел некоторые проблемы:
id observerObject = [notificationCenter addObserverForName:NSManagedObjectContextDidSaveNotification
object:secondManagedObjectContext
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *saveNotification) {
[mainThreadManagedObjectContext mergeChangesFromContextDidSaveNotification:saveNotification];
}];
Иногда это срабатывало, но в других случаях XCode останавливался при запуске и сбрасывал зеленую точку останова при вызове и просто перечислял поток и его номер, но без ошибки. (Примечание: эта проблема возникает только в том случае, если я создал два или более потока).
Виновником, по-видимому, является: [NSOperationQueue mainQueue], но я не могу понять, почему поток приостанавливается. Я смог нажать "Продолжить" в отладчике и просто двигаться дальше... но я не понимаю, почему он так работает.
Я предполагаю, что делаю что-то не так, и беспокоюсь, что мой новый способ может быть просто взломом.
Спасибо за помощь!