我遇到了一个问题,我只是想不出解决方案。
我的应用程序配置为使用 Core Data(使用 xCode 创建的 AppDelegate 中的模板代码),在后台线程中导入大量数据。问题是,如果我运行了大型导入,我在 UI 线程中对 Core Data 所做的所有更改都不会保存到存储(有时)。如果我不运行导入,所有数据都会正确保存,并且问题不一致,这是一个开/关问题,但我已将其追踪为导致问题的导入。
我的线程代码看起来像这样(简化)
-(void)startSynchronization{
self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(startSync:) object:nil];
[self.thread start];
}
-(void)startSync{
NSManagedObjectContext *importContext = [[NSManagedObjectContext alloc] init];
[importContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];
[importContext setUndoManager:nil];
... import a lot of code and create thousands of core data entities..
}
persistentStoreCoordinator(从现在开始的 PSC)是来自应用程序 AppDelegate 的 PSC,我认为这就是问题所在。我读到多个线程应该使用单独的 PSC,但是我如何创建一个 PSC 并将其分配给在 AppDelegate 模板代码中创建的核心数据文件?
导入后核心数据的读取工作正常,但是当我稍后将核心数据模型中的一个“文档”实体标记为我的最爱时,即使我调用保存,此更改也不会写入数据库我来自 AppDelegate 的上下文。
我以为全局 PSC 用于同步多个上下文,我的应用程序中的一个上下文,以及线程导入代码中的导入上下文?
如何确保导入代码和 UI 代码看到相同的更改,并且我的商店是一致的?
谢谢
/雅各布