个ManagedObjectContexts

个ManagedObjectContexts

在我正在开发的应用程序中,我需要同时访问和写入Core Data。我已经能够收集到这意味着我需要使用多个ManagedObjectContexts,但是我不明白如何设置这两个ManagedObjectContexts。

我了解,一旦设置好它们,就需要在其managedObjectContext的后台线程上执行写操作,然后通过这样的操作合并数据:Core Data and threads / Grand Central Dispatch

所以我的问题是,我将如何启动两个单独的ManagedObjectContexts,以便随后按说明使用它们?

最佳答案

您必须使用以下相同的NSManagedObjectContexts创建两个单独的NSPersistentStoreCoordinator

首先在这样的模型类中创建两个NSManagedObjectContexts名称backgroundManagedObjectContextmainBackgroundManagedObjectContext

+ (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];

    }

关于ios - 核心数据设置多个ManagedObjectContexts,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19107822/

10-11 17:50