Ios 核心数据-多个具有合并模型的持久存储区,创建所有存储区中所有实体的联合(尽管配置不同)
我有一个应用程序,其中我有多个模块,每个模块都有自己的ManagedObjectModel,每个模型定义了一个配置,其中包括该模型中的所有实体,以便将数据保存到不同的NSPersistentStore(sqlite) 在应用程序启动期间,我使用以下方法组合所有这些模型。这样,我的应用程序只需处理一个NSManagedObjectContext,就可以访问应用程序中的所有实体,而不必担心实体将保存到哪个存储。应用程序创建一个NSPersistentStoreCoordinator,然后添加与这些不同型号关联的不同商店 我遵循Marcus Zarra的核心数据和插件中的插件范例,将其应用于iOS 我看到的问题是,当我查看由NSPersistentStores创建的各种sqlite文件时,每个存储都包含来自NSManagedObjectModels联合的每个实体 如何防止核心数据将所有实体的联合添加到每个sqlite存储中? 附录:(我试图做的伪代码) 假设我们有以下几点: 在我们的项目中定义了两个ManagedObject模型:MOM1.xcdatamodeld和MOM2.xcdatamodeldIos 核心数据-多个具有合并模型的持久存储区,创建所有存储区中所有实体的联合(尽管配置不同),ios,core-data,core-data-migration,Ios,Core Data,Core Data Migration,我有一个应用程序,其中我有多个模块,每个模块都有自己的ManagedObjectModel,每个模型定义了一个配置,其中包括该模型中的所有实体,以便将数据保存到不同的NSPersistentStore(sqlite) 在应用程序启动期间,我使用以下方法组合所有这些模型。这样,我的应用程序只需处理一个NSManagedObjectContext,就可以访问应用程序中的所有实体,而不必担心实体将保存到哪个存储。应用程序创建一个NSPersistentStoreCoordinator,然后添加与这些不
MOM1 defines EntityA and EntityB. It defines "MOM1_Configuration" = Entities A,B.
MOM2 defines EntityC and EntityD. It defines "MOM2_Configuration" = Entities C,D.
在代码中,我们创建一个数组@[MOM1,MOM2],并使用modelByMergingModels组合它们
MergedMOM = [NSManagedObjectModel modelByMergingModels@[MOM1, MOM2]];
然后,我们通过以下方式将此MergedOM设置为NSPersistentStoreCoordinator:
[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:MergedMOM];
最后,我们通过以下方式添加门店:
NSURL* storeURL = [[[NSFileManager defaultManager] applicationDocumentsDirectory] URLByAppendingPathComponent:@"MOM1.sqlite"];
NSDictionary* migrationOptions = @{NSMigratePersistentStoresAutomaticallyOption : @(YES),
NSInferMappingModelAutomaticallyOption : @(YES)};
NSError* error;
NSPersistentStore* store = [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"MOM1_Configuration"
URL:storeURL
options:migrationOptions
error:&error];
及
一旦运行此操作并创建/保存所有类型的实体(A-D),实体A、B将正确保存到MOM1.sqlite,实体C、D将正确保存到MOM2.sqlite
但是,MOM1.sqlite为实体C、D和MOM2提供了空表。sqlite为实体A、B提供了空表
我如何设置它,使MOM1.sqlite不为C、D和MOM2定义任何表。sqlite不为A、B定义任何表,但我可以在我的应用程序中使用1个NSPersistentStoreCoordinator、MOM和一个ManagedObjectContext。你为什么在意?SQLite后端是一个未记录的实现细节。您的应用程序中是否存在需要修复的问题?我很关心,因为在我的应用程序中,我会将应用程序中使用完整模型的部分模型创建的sqlite商店捆绑在一起。这些sqlite存储将是只读的,我不能让应用程序用它们不使用的表来修改它们,但是我在核心数据中得到一个错误,说数据需要迁移。@rvijay007你找到解决方案了吗?我也有同样的问题-每个.sqlite文件包含每个实体的列,而不仅仅是其配置中的实体。“我不知道怎么修它。”亨德利:不,我不知道。不幸的是,这是通过设计配置CoreData的方式。
NSURL* storeURL = [[[NSFileManager defaultManager] applicationDocumentsDirectory] URLByAppendingPathComponent:@"MOM2.sqlite"];
NSDictionary* migrationOptions = @{NSMigratePersistentStoresAutomaticallyOption : @(YES),
NSInferMappingModelAutomaticallyOption : @(YES)};
NSError* error;
NSPersistentStore* store = [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"MOM2_Configuration"
URL:storeURL
options:migrationOptions
error:&error];