Как синхронизировать два NSManagedObjectContext - PullRequest
3 голосов
/ 12 июля 2010


Я работаю над приложением для 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 (то есть UITableViewController), которые имеют NSManagedObjectContext, инициализированы с контекстом appDelegate и используют в качестве источника данных NSFetchedResultsController, don ' • актуализировать информацию автоматически, как обычно.
Поэтому я спрашиваю вас:
Что я сделал не так? Это хороший способ использовать два разных контекста и синхронизировать их?

1 Ответ

1 голос
/ 12 июля 2010

То, что у вас здесь, выглядит правильно.Вы хотите убедиться, что реализовали методы NSFetchedResultControllerDelegate в rootViewController, чтобы изменения отображались в пользовательском интерфейсе.

...