Това е по-скоро защо това работи и това не е въпрос...
Използвам 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], но изглежда не мога да разбера защо би накарал нишката да спре. Успях да натисна продължи в дебъгера и просто да продължа... но не разбирам защо функционираше по този начин.
Предполагам, че правя нещо нередно и се притеснявам, че новият ми начин може да е просто хак.
Благодаря за помощта!