4

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

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

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

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

如何防止 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]];

然后我们通过以下方式将这个合并的MOM 设置为 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];

一旦运行并创建/保存了所有类型的实体 (AD),实体 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。

4

0 回答 0