You have to create two separate NSManagedObjectContexts
with the same NSPersistentStoreCoordinator
like this,
First create two NSManagedObjectContexts
name as backgroundManagedObjectContext
and mainBackgroundManagedObjectContext
in your model class like this
+ (NSManagedObjectContext *)backgroundManagedObjectContext
{
static NSManagedObjectContext * backgroundManagedObjectContext;
if(backgroundManagedObjectContext != nil){
return backgroundManagedObjectContext;
}
@try {
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
backgroundManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[backgroundManagedObjectContext setPersistentStoreCoordinator: [self persistentStoreCOordinator]];
}
}
@catch (NSException *exception) {
NSLog(@"Exception occur %@",exception);
}
return backgroundManagedObjectContext;
}
then both will need get the same persistentStoreCoordinator
then need to merge your backgroungManagedObjectContext
to mainBackgroundManagedObjectContext
, for that create NSNotification
whenever you save the data into backgroundManageObjectContext
like this
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(contextDidSave:)
name:NSManagedObjectContextDidSaveNotification
object:nil];
then you have to implement this notification method for updating your mainManagedObjectContext
like this
- (void)contextDidSave:(NSNotification *)notification
{
SEL selector = @selector(mergeChangesFromContextDidSaveNotification:);
[[self mainManagedObjectContext] performSelectorOnMainThread:selector withObject:notification waitUntilDone:YES];
}