我创建了一个相当简单的堆栈,其中我在一个私有队列上有一个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”上下文,则更改将保存到磁盘。但只要我将“主”上下文作为顶级父级,就不会将更改写入磁盘。
有谁知道为什么?