gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:30:56 24 4
gpt4 key购买 nike

我读到的关于在多线程上使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com