ios - 多个 NSPersistentStoreCoordinator 实例可以连接到同一个底层 SQLite 持久存储吗?

标签 ios core-data

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

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

后台获取操作永远不会更新数据,只会从中读取。我可以在连接到同一底层 SQLite 持久性的后台线程上设置完全并行的核心数据堆栈(NSManagedObjectContextNSManagedPersistentStoreCoordinatorNSManagedObjectModel)吗店铺?看起来这会在 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 实例执行后台获取。

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

关于ios - 多个 NSPersistentStoreCoordinator 实例可以连接到同一个底层 SQLite 持久存储吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741513/

相关文章:

ios - Typhoon:将子类属性从 withFactory:selector: 注入(inject)样式注入(inject)到定义中

ios - entry.remove(success, fail) 调用成功,但不删除图像

ios - Core Data deleteObject 将所有属性设置为 nil

ios - NSFetchedResultsController 对空结果的自定义行为

ios - 无法从其 DataSource 获取单元格

ios - 从 DynamoDBItem 中的字符串集中添加/删除一个元素

iphone - TableView coredata 临时对象

ios - swift : How to avoid duplicate entries in CoreData for implementation with JSON array?

ios - 如何在 Swift 中为 NSManagedObject 子类指定初始化器?

ios - 在 Xcode 中为不同环境组织 API 基本 URL 的最佳方式