你必须像这样创建两个单独NSManagedObjectContexts
的,NSPersistentStoreCoordinator
首先像这样在您的模型类中创建两个NSManagedObjectContexts
名称backgroundManagedObjectContext
mainBackgroundManagedObjectContext
+ (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;
}
那么两者都需要相同persistentStoreCoordinator
然后需要合并你的backgroungManagedObjectContext
到,因为每当你将数据保存到这样的地方时都会mainBackgroundManagedObjectContext
创建NSNotification
backgroundManageObjectContext
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(contextDidSave:)
name:NSManagedObjectContextDidSaveNotification
object:nil];
那么你必须实现这个通知方法来更新你mainManagedObjectContext
这样的
- (void)contextDidSave:(NSNotification *)notification
{
SEL selector = @selector(mergeChangesFromContextDidSaveNotification:);
[[self mainManagedObjectContext] performSelectorOnMainThread:selector withObject:notification waitUntilDone:YES];
}