我有一个应用程序,其中我有多个模块,每个模块都有自己的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。