多个NSPersistentStoreCoordinator实例是否可以连接到相同的底层SQLite持久存储?

我读过的关于在multithreading上使用Core Data的一切都谈到了使用多个共享一个NSPersistentStoreCoordinator NSManagedObjectContext实例。 这是理解的,我已经使它在一个应用程序中使用核心数据的主线程支持用户界面,并有一个后台获取操作,可能需要一段时间才能运行。

问题在于底层SQLite持久性存储的访问是由NSPersistentStoreCoordinator序列化的,所以仍然有后台抓取操作阻止UI的情况。

后台获取操作永远不会更新数据,只能从中读取数据。 我可以在连接到相同底层SQLite持久性存储的后台线程上设置完全并行的Core Data堆栈( NSManagedObjectContextNSManagedPersistentStoreCoordinatorNSManagedObjectModel )吗? 看起来这会给UI线程和后台获取操作之间的完全并发。

我自己的尝试性答案现在是肯定的

我通过传递NSPersistentStore实例来初始化我的后台操作。 在后台线程上,这个存储的属性(包括URL)被用来创build一个全新的Core Data堆栈,像这样:

  // create managed object model NSURL *modelUrl = [[NSBundle bundleForClass:[self class]] URLForResource:@"..." withExtension:@"..."]; NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl]; // create persistent store coordinator NSPersistentStoreCoordinator *persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel]; NSError *error = nil; [persistentStoreCoordinator addPersistentStoreWithType:[store type] configuration:[store configurationName] URL:[store URL] options:[store options] error:&error]; // create managed object context NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; [context setPersistentStoreCoordinator:persistentStoreCoordinator]; [persistentStoreCoordinator release]; [managedObjectModel release]; 

然后,我使用这个新创build的NSManagedObjectContext实例执行后台获取。

一切似乎工作得很好。 尽pipe如此,我还没有接受自己的答案,因为我希望有人提供支持或矛盾的证据给我的发现。