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