Я работаю над приложением для iPad, которое использует coredata. Он загружает информацию в базу данных, которая находится в сети, и записывает их в coredata. Приложение основано на разделенном представлении. Моя проблема заключалась в том, чтобы обновить данные в фоновом режиме.
Вот как я это сделал:
- Я создал NSOperation, который выполняет загрузку и обновление данных.
- Эта NSOperation использует другой NSManagedObjectContext, чем контекст appDelegate, возвращаемый этой функцией, который находится в appDelegate:
(NSManagedObjectContext*)newContextToMainStore {
NSPersistentStoreCoordinator *coord = nil;
coord = [self persistentStoreCoordinator];
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
[moc setPersistentStoreCoordinator:coord];
return [moc autorelease];
}
- У меня был наблюдатель в NSOperation, который будет вызывать эту функцию в appDelegate при сохранении контекста, чтобы также изменить контекст делегата:
- (void)mergeChangesFromContextSaveNotification:(NSNotification*)notification {
[[self managedObjectContext]mergeChangesFromContextDidSaveNotification:notification];
}
Но у меня проблема: когда я удаляю элемент в rootViewController, я действительно не знаю, как управлять изменениями в фоновом процессе, потому что внутри есть цикл, который просматривает все сущности: если я удаляю одно право, когда фоновый цикл имеет одно и то же право, это ... очень плохо ...
Мое решение состояло в том, чтобы просто остановить процесс обновления, когда я удаляю права, а затем перезапустить его, просто ...
Но я понял, что изменения, внесенные в "основной" контекст, не применяются в новом контексте Я просто создаю для обновления.
Поэтому я спрашиваю вас: почему изменения не применяются в новом контексте? Если это неправильно, как ты это делаешь? Используя mergeChangesFromContext или что-то еще?
Заранее спасибо.