NSManagedObjectサブクラスの生成に使用したいくつかのCoreDataエンティティを使用しており、それらのクラスを生成したときに、[プリミティブデータ型にスカラープロパティを使用する]オプションを選択しました。予想どおり、生成されたインターフェイスでは、整数属性がint16_t
プロパティとして宣言され、浮動小数点属性がプロパティとして宣言されました。float
@interface TeamStats:NSManagedObject
@property (nonatomic) int16_t pointsScored;
@property (nonatomic) float winPercentage;
@end
このインターフェイス用に生成された実装では、次のように宣言されたこれらのプロパティが表示され@dynamic
ます。
@implementation TeamStats
@dynamic pointsScored;
@dynamic winPercentage;
@end
さて、Core Dataのドキュメントによると、Core Dataはこれらのスカラープロパティを生成できないため、これらのスカラープロパティのアクセサーメソッドを作成する必要があります。
プロパティをスカラー値として宣言できますが、スカラー値の場合、Core Dataはアクセサーメソッドを動的に生成できません。独自の実装を提供する必要があります(「マネージドオブジェクトアクセサーメソッド」(44ページ)を参照)。Core Dataはプリミティブアクセサーメソッド(primitiveLengthおよびsetPrimitiveLength :)を自動的に合成しますが、コンパイラーの警告を抑制するためにそれらを宣言する必要があります。
これはすべて理にかなっており、これらのアクセサメソッドをどのように作成するかを尋ねるSOの投稿が多数あり、多くの良い答えがあります。
私が理解できないのはこれです:私はこのコードを書き、ドキュメントでこの詳細を読む前にそれを使い始めたので、アクセサメソッドを書いたことはありません。クラスの実装に@dynamic宣言があります。必要なアクセサメソッドを記述していないにもかかわらず、コードは正常に機能しているように見えます。このNSManagedObjectサブクラスのインスタンスを作成しました。このクラスのインスタンスsetPointsScored:
とpointsScored
メッセージを送信し、結果のインスタンスを永続ストアに保存しました。すべてがうまくいくようです。
ここで何が欠けていますか?Core Dataのドキュメントに記載されているにもかかわらず、生成されるデフォルトの実装はありますか?現在のコードが機能せず、注意する必要がある状況はありますか?NSManagedObjectサブクラスをさらにコーディングする前に、ここで何が起こっているのかを理解したいと思います...