Ios 是否可以将多个NSPersistentStoreCoordinator实例连接到同一基础SQLite持久存储?

Ios 是否可以将多个NSPersistentStoreCoordinator实例连接到同一基础SQLite持久存储?,ios,core-data,Ios,Core Data,我读到的关于在多线程上使用核心数据的所有内容都谈到使用多个NSManagedObjectContext实例共享一个NSPersistentStoreCoordinator。这是可以理解的,我已经在一个应用程序中使用了它,该应用程序使用主线程上的核心数据来支持UI,并且有一个后台获取操作,可能需要一段时间才能运行 问题在于,对底层SQLite持久存储的访问是由NSPersistentStoreCoordinator序列化的,因此仍然存在后台获取操作阻止UI的情况 后台提取操作永远不会更新数据,只会

我读到的关于在多线程上使用核心数据的所有内容都谈到使用多个
NSManagedObjectContext
实例共享一个
NSPersistentStoreCoordinator
。这是可以理解的,我已经在一个应用程序中使用了它,该应用程序使用主线程上的核心数据来支持UI,并且有一个后台获取操作,可能需要一段时间才能运行

问题在于,对底层SQLite持久存储的访问是由
NSPersistentStoreCoordinator
序列化的,因此仍然存在后台获取操作阻止UI的情况


后台提取操作永远不会更新数据,只会从中读取数据。我是否可以在连接到同一基础SQLite持久存储的后台线程上设置完全并行的核心数据堆栈(
NSManagedObjectContext
NSManagedPersistentStoreCoordinator
)呢?看起来这将在UI线程和后台获取操作之间提供完全的并发性

我自己对这个问题的初步回答现在是

我通过传递
NSPersistentStore
实例来初始化后台操作。在后台线程上,此存储的属性(包括URL)用于创建一个全新的核心数据堆栈,如下所示:

    //  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];
然后,我使用这个新创建的
NSManagedObjectContext
实例执行后台提取


一切似乎都很好。不过,我还不接受自己的答案,因为我希望有人能为我的发现提供支持或反驳的证据。

Hi-GB,这对你来说还可以吗?我需要这样做,但我在网上找不到任何答案。到目前为止,我仍然没有遇到任何关于此方法的问题。据我所知,SQLite支持多个并发读卡器和一个编写器。每个NSPersistentStoreCoordinator都将成为一个读者,所以这是完全可能的。这个模型似乎适合我,但我还没有看到确切的证据证明它是完全合法的。在我的例子中,后台线程大部分是读的,但有时是写的(从网站下载数据之后)。