我继承了一个使用 Core Data 的 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 只处理添加到单个协调器的持久存储。基于这个假设,我想知道是否可以创建一个协调器并向其添加多个商店。
我对 Core Data 不是很熟悉,但我看不出这怎么可能,因为协调器是用托管对象模型初始化的(它指向一个特定的数据模型文件,其中只包含一组实体的总数)项目)。
有任何想法吗?我真的很想避免将所有数据模型合并到一个单独的模型中,以便使用单个托管对象模型和协调器(实际上我想这样做,但我相信它会破坏一切,我真的不必现在是时候了)。