У меня есть ситуация, когда я вношу некоторые изменения в свойства NSManagedObject в основном потоке. Он относится к главному ManagedObjectContext приложения.NSManagedObjectContextDidSaveNotification не запускается в iOS 7
Мое приложение имеет включенное потокование, которое загружает данные, каждый поток имеет свой собственный ManagedObjectContext, созданный из последнего состояния одного PersistentStore во всем приложении.
Я реализую NSManagedObjectContextDidSaveNotification
, чтобы любые изменения в MOC были объединены обратно в MOC основного потока. Ниже приведен код для этого:
- (void)backgroundMOCDidSave:(NSNotification*)notification
{
// Probable fix for: http://stackoverflow.com/questions/3446983/collection-was-mutated-while-being-enumerated-on-executefetchrequest
if (![NSThread isMainThread])
{
[self performSelectorOnMainThread:@selector(backgroundMOCDidSave:) withObject:notification waitUntilDone:YES];
return;
}
// We merge the background moc changes in the main moc
[self.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
}
Регистрация для этого уведомления:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(backgroundMOCDidSave:)
name:NSManagedObjectContextDidSaveNotification
object:nil];
Странные вещи происходят в прошивкой 7, хотя. Я доступ к NSManagedObject, который создается из главного MOC:
- Когда я изменить свойство ManagedObject, который принадлежит к основному МОС (основная нить) и выполнить
-save
на-backgroundMOCDidSave:
вызов не запускается - Когда Я не изменять любые свойства ManagedObject и просто выполнить
-save
операции по его MOC уведомления срабатывают
тот же код работает отлично в прошивкой 6. Независимо от того, будет ли сделано какие-либо изменения на ManagedObject или нет, когда a -save
вызывает на MOC уведомление NSManagedObjectContextDidSaveNotification
запускается.
Кто-нибудь сталкивался с этой проблемой раньше?
Являются ли ваши фоновые контексты независимыми или вложенными из основного контекста? –
Нет, все контексты создаются из одного постоянного хранилища. Вот почему я объединяю изменения из всех контекстов в основной контекст, который будет записываться в хранилище. –
Как вы проверяете, запускается ли 'backgroundMOCDidSave:'? –