Когда мы впервые добавили Core Data в наше приложение, учебник, которому мы следовали, создал NSManagedObjectContext
в нашем делегате приложения. Рекомендуется, чтобы при использовании Core Data в других потоках мы добавляли наблюдателя для обновления нашего основного контекста при сохранении контекста потока, например:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:self.managedObjectContext];
Это случается один раз в applicationDidFinishLoadingWithOptions:
. Тем не менее, документация для NSManagedObjectContext
гласит:
Некоторые системные структуры используют Core Data для внутреннего использования. Если вы зарегистрируетесь для получения этих уведомлений из всех контекстов (путем передачи nil в качестве параметра объекта методу addObserver…), вы можете получить неожиданные уведомления, которые трудно обработать.
Это подсказывает мне, что параметром объекта должен быть контекст, который сохраняется (в моем случае фоновый контекст), а не основной контекст. Это тот случай? Нужно ли наблюдать NSManagedObjectContextDidSaveNotification от каждого NSManagedObjectContext, который я создаю?