26

パフォーマンス上の理由から、エンティティの一部にインデックス付き属性を設定したいと考えています。変更を実行するために、新しいコア データ モデル バージョンを作成しました。Core Data は変更を検出し、モデルを新しいバージョンに移行しますが、NO INDEXES ARE GENERATED .

データベースを最初から再作成すると、インデックスはそこにあります。iPhone と Simulator の両方で SQLite Browser を使用して確認しました。この問題は、以前の形式のデータベースが既に存在する場合にのみ発生します。

インデックスを手動で追加する方法はありますか? そのためのSQLを書きますか?または、何か不足していますか?私はすでにいくつかのより重要な移行を行っていますが、問題はありません。しかし、これらの欠落したインデックスは私を悩ませています。

助けてくれてありがとう!

4

2 に答える 2

53

私も同じ問題を抱えていました。

Core Data Model Versioning and Data Migration Programming Guideによると:

バージョニングに関する Core Data の見解は、永続性に影響するモデルの機能のみに関心があるというものです。

Core Data は 2 つのモデル スキーマを異なるものとして認識しないため (インデックスは永続性に影響しません)、既存のモデル プロパティにインデックスを追加するだけでは、移行は自動的にトリガーされません。

ただし、バージョン ハッシュ修飾子を新しくインデックス付けされた属性に追加することで、モデルが変更されたと Core Data に認識させることができます。これにより、軽量の移行がトリガーされ、既存のデータベースが更新されました。

于 2010-07-05T21:44:06.047 に答える
0

どのような移行戦略を使用しましたか?

XCode では、マッピング モデルを生成し、インデックス作成を含む、発生する変更を表示できます。

単純にマッピング モデルを追加し、インデックスの変更が指定されていることを確認して、軽量の自動移行を実行することをお勧めします。

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,nil];
NSPersistentStore *migratedStore = [persistentStoreCoordinator addPersistentStoreWithType:nil configuration:nil URL:storeURL options:options error:&error];
migrationWasSuccessful = (migratedStore != nil);

永続ストア コーディネーターは、マッピング モデルを自動検出し、それを使用して移行を実行します。実行時の推論モデルは、エンティティ プロパティへのインデックスの適用に敏感ではないようです。

于 2010-03-29T20:20:37.823 に答える