0

構成を使用して、コア データの一時的なエンティティを管理しようとしています。

  • まず、「Persistent」と「Transient」という名前の 2 つのコアデータ構成を作成しました。
  • 次に、エンティティを作成し、エンティティが永続的かどうかに応じて、エンティティを適切な構成に関連付けました。
  • 最後に、persistentStoreCoordinator を使用して、Sqlite タイプの永続ストアを 1 つ作成し、それを「永続」構成にリンクしました。タイプメモリの永続ストアも作成し、それを「一時」構成にリンクしました。

テスト: iphone シミュレーターを起動すると、アプリが正常に起動します。シミュレーターを閉じて、データベース ファイルで sqlite3 を開始します。テーブルを一覧表示 ( .tables コマンド) すると、一時的なエンティティ用にいくつかのテーブルが作成されていることがわかります => したがって、機能しません。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    NSLog(@"++++++++ persistentStoreCoordinator");

    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    NSURL *persistStoreURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ProjectToDelete.sqlite"];

    NSMutableDictionary *sqliteOptions = [NSMutableDictionary dictionary];
    [sqliteOptions setObject:@"WAL" forKey:@"journal_mode"];

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
                             sqliteOptions, NSSQLitePragmasOption,
                             nil];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"Persistent" URL:persistStoreURL options:options error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:@"Transient" URL:[NSURL URLWithString:@"memory://store"] options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return _persistentStoreCoordinator;
}
4

2 に答える 2

0

コメントで述べたように、モデル エディターを使用してデータ ストアを構成しようとしても機能しません。構成により、事前定義されたフェッチを追加できる場合がありますが、データが保存される場所を構成することはできません。これは、これらの方法のいずれかを使用するための鍵です。これらの手法を適切に使用するには、ブログ投稿で説明されているように、いくつかのコードを追加する必要があります。

于 2013-03-01T10:18:12.173 に答える
0

CoreData のさまざまな概念が混在していると思います。

CoreData は ORM ではなく、オブジェクトとその関係を管理するオブジェクト グラフです。

エンティティに一時的なプロパティを設定できます。これは、オブジェクトがメモリ内にある間、実行時にのみ生成され、そのエンティティを表すテーブルの列にはなりません。

抽象エンティティは、インスタンス化されることを意図したものではありません。通常、1 つのスーパーオブジェクトから継承するオブジェクトが多数ある場合に使用されます。つまり、従業員管理システムに抽象的な個人エンティティがあり、従業員、マネージャー、ディレクター、およびマネージャーがすべてPerson から継承します

于 2013-02-27T19:57:33.303 に答える