12

短い質問:

Core Data モデルが変更された場合 (新しいエンティティ、新しいプロパティなど) にのみ、アプリで特定のコードを実行したいと考えています。モデルが変更されたかどうかを確認するにはどうすればよいですか?

いくつかの擬似コード:

    if (current_model_version != previous_model_version) {
    //do some code
    } else {
    // do some other code
    }

これを行うには versionHashes を使用するか、isConfiguration:compatibleWithStoreMetadata: を使用する可能性があると思いますが、その方法はわかりません。

わかりやすくするために一部編集しています。「現在」は「現在」、「前回」は「前回のアプリ起動時」です。

4

2 に答える 2

13

答えはisConfiguration:compatibleWithStoreMedia:のようです。

ここでいくつかの有用な情報を見つけました:

http://mipostel.com/index.php/home/70-core-data-migration-standard-migration-part-2

私はこのように設定しました:

- (BOOL)modelChanged
{
    NSError *error;
    NSURL * sourceURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"db.sqlite"];
    NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:sourceURL error:&error];
    BOOL isCompatible = [[self managedObjectModel] isConfiguration:nil compatibleWithStoreMetadata:sourceMetadata];

    return isCompatible;

}

「self」は私の共有データ ストアですが、必ずしもそこに移動する必要があるわけではありません。

deanWombourne は、これが実際に行うことは、データを自動的に移行できるかどうかを判断することであり、私が提起した問題の正確な解決策ではないことを指摘しています。この場合、それは私のニーズに応えます。

于 2012-10-06T03:58:00.340 に答える