核心数据 - 具有合并模型的多个持久存储,尽管配置,但在所有存储中创建所有实体的并集

时间:2013-08-02 05:27:34

标签: ios core-data core-data-migration

我有一个应用程序,其中我有多个模块,每个模块都有自己的ManagedObjectModel,每个模型定义一个包含该模型中所有实体的配置,以便将数据保存到不同的NSPersistentStore(sqlite)。

在应用程序启动期间,我使用以下方法组合所有这些模型。这样我的应用程序就可以处理一个NSManagedObjectContext并可以访问应用程序中的所有实体,而不必担心实体将保存到哪个存储。该应用程序生成一个NSPersistentStoreCoordinator,然后添加与这些不同模型关联的不同商店。

我遵循Marcus Zarra的核心数据和插件的插件范例:http://www.cimgf.com/2009/05/03/core-data-and-plug-ins/,使其适应iOS。

我看到的问题是,当我查看由NSPersistentStores创建的各种sqlite文件时,每个商店都包含来自NSManagedObjectModel联合的每个实体。

如何阻止Core Data将所有实体的Union添加到每个sqlite商店?

附录:(我正在尝试做的伪代码)

假设我们有以下内容:

在我们的项目中定义了两个ManagedObject模型,MOM1.xcdatamodeld和MOM2.xcdatamodeld。

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]];

然后我们通过以下方式将此mergedMOM设置为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];

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];

一旦运行并创建/保存所有类型的实体(A-D),实体A,B就会正确保存到MOM1.sqlite,实体C,D会正确保存到MOM2.sqlite。

但是,MOM1.sqlite对于实体C,D和MOM2具有空表。对于实体A,B,它具有空表。

如何设置它以使MOM1.sqlite不为C,D和MOM2定义任何TABLES.ssite没有为A,B定义任何TABLES,但是我可以使用1 NSPersistentStoreCoordinator,MOM,因此我的应用程序中有一个ManagedObjectContext。

0 个答案:

没有答案