Это больше, почему это работает, и это не такой вопрос ...
Я использую 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], но я не могу понять, почему это заставит поток приостановиться.Мне удалось нажать «Продолжить» в отладчике и просто двигаться дальше ... но я не понимаю, почему он работал таким образом.
Я предполагаю, что я делаю что-то не так, и я волнуюсь, что мой новый способможет быть просто взломать.
Спасибо за помощь!