18

Core Data Programming Guideから(私の強調):

デフォルトでは、Core Dataは、管理対象オブジェクト クラスのモデル化されたプロパティ (属性と関係) に対して、効率的なパブリックおよびプリミティブの get および set アクセサー メソッドを動的に作成します。

Objective-C を使い始めて以来、私はCore Data とmogeneratorを快適に使用してきましたが、プライベート API の使用が疑われるためにアプリの提出が拒否されるまで、これが何を意味するのか見たことがありませんでした。生成されたメソッドについての長い話ですsetPrimitiveTypeValue:が、私の質問の内容ではありません。

このガイドを読んでいるときに、エンティティ属性のパブリック アクセサーとプリミティブ アクセサーのアイデアに出くわしました。別の引用ですが、さらに下に:

たとえば、属性 を持つエンティティが与えられた場合firstName、Core Data はfirstNamesetFirstName:primitiveFirstName、および を自動的に生成しsetPrimitiveFirstName:ます。

プリミティブアクセサーは何のためのものですか? BOOL 値を NSNumber にラップせずに直接割り当てることができるようにするためですか? もしそうなら、なぜ mogenerator はあらゆる種類の<Attribute>Value, set<Attribute>Value:,アクセサprimitive<Attribute>Valueを生成するという問題を経験したのでしょうか?setPrimitive<Attribute>Value:

私は混乱しています、誰が私を助けることができますか?


関連する質問:

4

2 に答える 2

12

私が理解している限り、プリミティブ メソッドは実際の取得と設定を行いますが、KVC または KVO 通知 (「willAccessValueForKey」など) は発行しません。パブリック メソッドはプリミティブ メソッドを呼び出しますが、呼び出しを KVO 呼び出しでラップします。したがって、通常はオブジェクトの外部からパブリック メソッドを呼び出しますが、内部的な理由 (たとえば、他のプロパティを検証または派生させるため) でオブジェクトのプロパティを使用する必要がある場合は、プリミティブ メソッドを使用して起動を回避します。すべての通知。

それは私が興味を持っているが完全に精通していない主題であるため、回答の修正または説明を歓迎します。

于 2011-09-15T08:24:55.633 に答える
1

@jrturton の回答では、パブリック アクセサーが単純なカスタム属性および対 1 関係のアクセサー メソッドに関する問題がカバーされています。

さらに、To-Many Relationshipアクセサーを完全にサポートするために、カスタム実装では、パブリック アクセサーは、NSMutableSet メソッド (unionSet: および MinusSet:) と組み合わせてプリミティブ アクセサーを呼び出す必要がある場合があります。これは、KVO メソッド ペア内にラップする必要があります ( will. ..やりました...)。

于 2014-06-28T04:34:42.743 に答える