在一个iOS应用程序中,我想将NSPersistentStoreCoordinatorNSIncrementalStore子类一起使用,以便从REST API提取数据,同时也要与SQLite存储一起使用,以保存到磁盘。但是,如果我将两种类型的持久性存储都添加到协调器中,则在托管对象上下文上调用save:无效。如果我仅添加一个持久性存储,而不是NSIcrementalStore子类的类型,则保存将按预期工作。

有什么方法可以实现此功能?

最佳答案

根据我的经验,最好的解决方案是拥有多个托管对象上下文,每个托管对象都有自己的模型。

但是,有一种方法可以完成您想要的工作:

// create the store coordinator
NSPersistentStoreCoordinator *storeCoordinator = [[NSPersistentStoreCoordinator alloc] init];
// create the first store
NSPersistentStore *firstStore = [storeCoordinator addPersistentStoreWithType: NSIncrementalStore configuration:nil URL:urlToFirstStore options:optionsForFirstStore error:&error];
// now create the second one
NSPersistentStore *secondStore = [storeCoordinator addPersistentStoreWithType:NSSQLiteStore configuration:nil URL:urlToSecondStore options:optionsForSecondStore error:&error];

// Now you have two stores and one context
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:storeCoordinator];

// and you can assign your entities to different stores like this
NSManagedObject *someObject = [[NSManagedObject alloc] initWithEntity:someEntity insertIntoManagedObjectContext:context];
// here the relevant part
[context assignObject:someObject toPersistentStore:firstStore]; // or secondStore ..

您还应该检查以下链接,以更好地了解Core Data的工作原理:

Core Data Programming Guide - Persistent Store Coordinator

SO: Two persistent stores for one managed object context - possible?

SO: Can two managed object context share one single persistent store coordinator?

还请检查TechZen在第二个链接中有关配置的评论,并在此处阅读有关它的信息:

Core Data Programming Guide - Configurations

这是管理两个对象上下文的不错的教程:

Multiple Managed Object Contexts with Core Data

08-27 01:34