0

Core Data を使用する iOS プロジェクトを継承しました。このプロジェクトには8 つの異なるデータ モデルがありますが、プロジェクトがそれほど大きくなく、多数のデータ モデルにエンティティを分割する正当な理由が見当たらないことは言うまでもありません。

Encrypted Core Dataを現在のデータ モデルと永続ストア コーディネーターで使用しようとしていますが、まったく機能しません。すべてのデータ モデルは次のように初期化されます。

    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 についてあまり詳しくありませんが、コーディネーターがマネージド オブジェクト モデルで初期化されているため、それがどのように可能になるかわかりません (これは、エンティティの総数のセットのみを含む特定のデータ モデル ファイルを指します)。事業)。

何か案は?単一のマネージド オブジェクト モデルとコーディネーターを使用するために、すべてのデータ モデルを単一のモデルにマージすることは本当に避けたいと思います (実際にはそうしたいと思いますが、すべてが壊れてしまうと確信しており、実際にそうする必要はありません)。今がその時です)。

4

1 に答える 1

3

モデルをマージせずに単一の永続ストア コーディネーターを使用することはできません。ただし、データ モデルを編集する必要はありません。実行時にマージできます。NSManagedObjectModel複数のモデルを単一の統合モデルにマージするためのいくつかの異なる方法を提供します。各モデルを個別に読み込んでコードにマージすると、NSManagedObjectModel各モデル ファイルから結合されたモデルを表す 1 つのモデルが得られます。その後、単一の永続ストア コーディネーターと組み合わせたモデルを使用できます。

まだ複数のモデル ファイルを使用している場合は、それぞれを個別に追加できます。ただし、これには複雑な問題が発生します。新しいモデル オブジェクト インスタンスを作成するときに、Core Data はどのモデル ファイルを使用するかをどのように判断するのでしょうか? assignObject:toPersistentStore:メソッド onを使用してNSManagedObjectContext、どちらを使用するかを指示する必要があります。新しいインスタンスを作成するたびに、これも行います。これは、NSPersistentStore各ファイルのインスタンスへの参照を保持し、あらゆる場合に使用するものを知る必要があることを意味します。

暗号化された Core Data を使用していないことを付け加えておく必要があるため、これが実際の問題を解決するかどうかはわかりません。ただし、このアプローチでは、1 つのコーディネーターで複数のモデル ファイルと複数の永続ストアを使用できます。

于 2015-11-03T18:34:25.110 に答える