Ios 具有单个持久存储协调器的多个数据模型

Ios 具有单个持久存储协调器的多个数据模型,ios,core-data,sqlcipher,encrypted-core-data-sql,Ios,Core Data,Sqlcipher,Encrypted Core Data Sql,我继承了一个使用核心数据的iOS项目。这个项目有8个不同的数据模型,不用说这个项目没有那么大,我也看不出有什么好的理由将实体分割成这么多的数据模型 我试图使用当前的数据模型和持久存储协调器,但它根本不起作用。每个数据模型的初始化如下: NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"First" withExt

我继承了一个使用核心数据的iOS项目。这个项目有8个不同的数据模型,不用说这个项目没有那么大,我也看不出有什么好的理由将实体分割成这么多的数据模型

我试图使用当前的数据模型和持久存储协调器,但它根本不起作用。每个数据模型的初始化如下:

    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"First"
                                              withExtension:@"momd"];

    self.model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    
    // Coordinator
    //NSPersistentStoreCoordinator *psc = [EncryptedStore makeStore: self.model passcode: @"pass"];
    [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.model];

    NSURL *storeURL = [[[AppDelegate appDelegate] applicationDocumentsDirectory] URLByAppendingPathComponent: @"First.sqlite"];
    
    NSError *error = nil;
    [psc addPersistentStoreWithType:NSSQLiteStoreType
                              configuration:nil
                                        URL:storeURL
                                    options:nil
                                      error:&error];
    
    NSManagedObjectContextConcurrencyType ccType = NSMainQueueConcurrencyType;

    self.context = [[NSManagedObjectContext alloc] initWithConcurrencyType:ccType];
    [self.context setPersistentStoreCoordinator:psc];
因此,每个数据模型都有自己的托管对象模型和自己的持久存储协调器以及持久存储和上下文

我看到的是,加密核心数据(ECD)只是在第一个创建的持久存储中创建表。我怀疑ECD只处理添加到单个协调器的持久存储。基于这个假设,我想知道是否有可能创建一个协调器并向其添加多个存储

我对核心数据不太熟悉,但我看不出这是怎么可能的,因为协调器是用托管对象模型初始化的(该模型指向一个特定的数据模型文件,其中只包含项目中的一组实体)

有什么想法吗?为了使用单个托管对象模型和协调器,我真的希望避免将所有数据模型合并到一个模型中(实际上我希望这样做,但我确信它会崩溃)
每件事,我现在真的不必花时间去做。)

如果不合并模型,就不能使用一个持久存储协调器。然而,您不必编辑数据模型——您可以在运行时合并它们
NSManagedObjectModel
提供了几种不同的方法将多个模型合并到一个统一的模型中。如果独立加载每个模型并将它们合并到代码中,则会从每个模型文件中获得一个表示组合模型的
NSManagedObjectModel
。然后,您可以将该组合模型与单个持久存储协调器一起使用

如果仍在使用多个模型文件,则可以分别添加每个模型文件。但这带来了一个复杂问题——在创建新的模型对象实例时,核心数据如何知道要使用哪个模型文件?您必须使用
NSManagedObjectContext
上的
assignObject:toPersistentStore:
方法来告诉它使用哪一个。每次创建一个新实例时,您也会这样做。这意味着您需要为每个文件保留对
NSPersistentStore
实例的引用,并知道在每种情况下使用哪个实例


我应该补充一点,我没有使用加密的核心数据,所以我不知道这是否能解决你真正的问题。这种方法允许多个模型文件和多个具有单个协调器的持久存储。

如果不合并模型,就不能使用单个持久存储协调器。然而,您不必编辑数据模型——您可以在运行时合并它们
NSManagedObjectModel
提供了几种不同的方法将多个模型合并到一个统一的模型中。如果独立加载每个模型并将它们合并到代码中,则会从每个模型文件中获得一个表示组合模型的
NSManagedObjectModel
。然后,您可以将该组合模型与单个持久存储协调器一起使用

如果仍在使用多个模型文件,则可以分别添加每个模型文件。但这带来了一个复杂问题——在创建新的模型对象实例时,核心数据如何知道要使用哪个模型文件?您必须使用
NSManagedObjectContext
上的
assignObject:toPersistentStore:
方法来告诉它使用哪一个。每次创建一个新实例时,您也会这样做。这意味着您需要为每个文件保留对
NSPersistentStore
实例的引用,并知道在每种情况下使用哪个实例


我应该补充一点,我没有使用加密的核心数据,所以我不知道这是否能解决你真正的问题。这种方法允许多个模型文件和多个具有单个协调器的持久存储。

如果不合并模型,就不能使用单个持久存储协调器。然而,您不必编辑数据模型——您可以在运行时合并它们
NSManagedObjectModel
提供了几种不同的方法将多个模型合并到一个统一的模型中。如果独立加载每个模型并将它们合并到代码中,则会从每个模型文件中获得一个表示组合模型的
NSManagedObjectModel
。然后,您可以将该组合模型与单个持久存储协调器一起使用

如果仍在使用多个模型文件,则可以分别添加每个模型文件。但这带来了一个复杂问题——在创建新的模型对象实例时,核心数据如何知道要使用哪个模型文件?您必须使用
NSManagedObjectContext
上的
assignObject:toPersistentStore:
方法来告诉它使用哪一个。每次创建一个新实例时,您也会这样做。这意味着您需要为每个文件保留对
NSPersistentStore
实例的引用,并知道在每种情况下使用哪个实例


我应该补充一点,我没有使用加密的核心数据,所以我不知道这是否能解决你真正的问题。这种方法允许多个模型文件和多个具有单个协调器的持久存储。

如果不合并模型,就不能使用单个持久存储协调器。然而,您不必编辑数据模型——您可以在运行时合并它们
NSManagedObjectModel
提供了几种不同的方法将多个模型合并到一个统一的模型中。如果独立加载每个模型并将它们合并到代码中,则会从每个模型文件中获得一个表示组合模型的
NSManagedObjectModel
。然后可以将该组合模型与单个persiste一起使用