2

NSManagedObjectModel -versionIdentifiersのドキュメントによると、

Core Dataフレームワークは、モデルにデフォルトの識別子を提供しません。また、実行時にこの値に依存しません。Xcodeで作成されたモデルの場合、モデルインスペクターでこの値を設定します。

よくわかりませんが、モデル移行ポリシークラスのコーディングを行う際に、バージョン識別子を設定すると役立つと思います。Xcodeでこれらの識別子を設定する方法を知っている人はいますか?私は成功せずにかなりのことを突っ込んできました。

ありがとう。

4

1 に答える 1

3

さて、このアプローチは私にとって役に立ちませんでした。次のコードを使用して、Core Data 移行のデバッグの問題を解決しました。

    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Spark.sqlite"]];

    NSError *error = nil;
    NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType
                                                                    URL:storeUrl
                                                                    error:&error];

    if (!sourceMetadata)
        NSLog(@"sourceMetadata is nil");
    else
        NSLog(@"sourceMetadata is %@", sourceMetadata);

一方、私は今、最初の質問に対する答えを見つけました、fwiw。

プロジェクト ウィンドウに移動して .xcdatamodel ファイルを選択し、「情報を取得」すると、ほとんどの場合、「ファイル "Xxx.xcdatamodel" 情報」ウィンドウが表示されます - 「一般」、「ターゲット」、「ビルド」 」および「コメント」タブ。(はい、「ほとんどの場合」の部分は私を混乱させました。)

ただし、再度 .xcdatamodel ファイルを選択して「情報を取得」すると、(おそらく) 非常に異なるインスペクターが表示されます - 「データ モデル "Xxx" 情報」と呼ばれるものです。このウィンドウには、「外観」と「バージョン管理」の 2 つのタブがあります。[バージョン管理] タブでは、モデル バージョン識別子を設定できます。

結論: Xcode でモデル バージョン識別子を設定することは、プラットフォーム 9 3/4 への道を歩むことに似ています。

于 2010-10-23T00:46:40.153 に答える