1

私のアプリはCoreDataフレームワークを使用しており、ストア メタデータとマネージド オブジェクト モデルの間の互換性を確認したいと考えています。私はそれを標準的な方法で行います:

BOOL isModelCompatible = [model isConfiguration:nil
                    compatibleWithStoreMetadata:metadata];

を返しますNO。ただし、メタデータ内のエンティティはモデル内のものと同じです。エンティティの数が同じで、各エンティティの名前が同じです。ただし、このモデルを使用してストアが作成されてからモデルが実際に変更されたため、1 つのエンティティでいくつかの属性を削除しました。そして、モデルがストアのメタデータと互換性がなくなるのに十分かどうか疑問に思っています. 公式ドキュメントを調べたところ、次のように書かれています。

This method compares the version information in the store metadata with the entity versions of a given configuration

そして問題は (私が Apple のドキュメントを読んでいるときによくあることですが)、このフレーズが正確に何を意味するのかよくわからないことです。それで、誰かがそのトピックについてもっと説明できますか? CoreDataメタデータのエンティティがモデルのエンティティと同じである場合、モデルがメタデータと互換性があるかどうかをどのように判断しますか?

4

1 に答える 1

1

データ ファイルへのデータの格納方法に違いがある場合、モデルは永続ストアと互換性がありません。その変更は SQLite でのデータの保存方法に影響するため、属性を削除しても問題ありません。データ ファイルはどちらの方法でも同じであるため、一部の変更では非互換性が発生しません。たとえば、リレーションシップをオプションから必須に変更した場合などです。

正確な詳細を知りたい場合は、NSEntityDescriptionおよび関連するクラスの versionHash プロパティを調べてください。これにより、何が使用されているかが正確にわかり、言及されていないものは互換性に影響しません。たとえばNSEntityDescription

永続性に影響を与える値は、エンティティの名前、スーパーエンティティのバージョン ハッシュ (存在する場合)、エンティティが抽象の場合、およびプロパティのすべてのバージョン ハッシュです。

そこから続行するには、同じプロパティNSPropertyDescriptionとそのサブクラスを検索します。

Core Data のモデル移行は、新しいデータ モデルに一致するように永続ストアを更新することにより、非互換性を解消します。多くの場合、これは軽量移行のように自動的に実行できます。属性を削除すると、軽量の移行が可能になります。

于 2016-03-18T16:58:09.067 に答える