核心数据专用队列不保存

时间:2014-06-19 22:16:41

标签: objective-c core-data concurrency

我创建了一个相当简单的堆栈,其中我在一个私有队列上有一个Master上下文,它附加了持久存储。我遇到的问题是更改正在主队列中停止。它们似乎没有被传递到专用队列以将更改写入磁盘。

我创建了主上下文:

        _masterContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];

        _masterContext.persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:objectModel];
        NSError *error = nil;
        NSDictionary *migrationOptions = @{ NSMigratePersistentStoresAutomaticallyOption : @YES, NSInferMappingModelAutomaticallyOption : @YES };
        [_masterContext.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                                configuration:nil
                                                                          URL:databaseURL
                                                                      options:migrationOptions
                                                                        error:&error];
        if (error){
            NSLog(@"Core Data Error: %@", error.description);
        }

然后我创建了一个“主”上下文,它在主队列上运行,并用它与应用程序的其余部分进行交互:

    NSManagedObjectContext *mainContext = ({
        NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
        context.parentContext = _masterContext;
        context;
    });

最后,为同步操作创建了另一个私有并发队列:

    CSCoreDataSyncEngine *syncEngine = [[CSCoreDataSyncEngine alloc] initWithParentContext:mainContext
                                                                               usingServer:[CSRemoteServerV1 new]
                                                                                   adapter:[CSServerCoreDataAdapterV1 new]];

    CSModelManager *modelManager = [[CSModelManager alloc] initWithDataStore:mainContext syncEngine:syncEngine];

值得注意的是:modelManager 使用主队列。 syncEngine将创建自己的私有并发队列以执行同步操作。

如果我删除“master”上下文并将持久存储附加到“main”上下文,则更改将保存到磁盘。但只要我将“主”上下文作为顶级父级,就不会将更改写入磁盘。

有谁知道为什么?

0 个答案:

没有答案