在我正在开发的应用程序中,我需要同时访问和写入 Core Data。我已经能够收集到这意味着我需要使用多个 managedObjectContexts,但我不明白我应该如何设置这两个 managedObjectContexts。
我知道,一旦我设置好它们,我需要在后台线程上对其 managedObjectContext 执行写操作,然后通过如下操作合并数据:Core Data and threads / Grand Central Dispatch .
所以我的问题是,我将如何启动两个单独的 managedObjectContexts 以便我可以按照描述使用它们?
您必须像这样使用相同的 NSPersistentStoreCoordinator
创建两个单独的 NSManagedObjectContexts
,
首先在你的模型类中创建两个 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
,这样每当您像这样将数据保存到 backgroundManageObjectContext
时都会创建 NSNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selectorselector(contextDidSave
name:NSManagedObjectContextDidSaveNotification
object:nil];
那么你必须实现这个通知方法来更新你的 mainManagedObjectContext
像这样
- (void)contextDidSaveNSNotification *)notification
{
SEL selector = @selector(mergeChangesFromContextDidSaveNotification;
[[self mainManagedObjectContext] performSelectorOnMainThread:selector withObject:notification waitUntilDone:YES];
}
关于ios - 核心数据设置多个 managedObjectContexts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107822/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |