CocoaのKey-Valueコーディング(KVC)メカニズムをもう少しよく理解しようとしています。AppleのKey-Valueプログラミングガイドを読みましたが、特定のKVCメソッドがキーを検索する方法についてまだ少し混乱しています。特に、mutableArrayValueForKey :。
valueForKey:
以下では、 KVCの「ゲッター」が機能することをどのように理解しているかを説明します。次に、mutableArrayValueForKeyに関する質問に行きます。
7つの異なる「ゲッター」KVCメソッドがあります。
- (id)valueForKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;
- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key;
- (NSMutableArray *)mutableArrayValueForKeyPath:(NSString *)keyPath;
- (NSMutableSet *)mutableSetValueForKey:(NSString *)key;
- (NSMutableSet *)mutableSetValueForKeyPath:(NSString *)keyPath;
プロパティ(myKeyという名前)内の値を検索する場合、AppleのドキュメントにはvalueForKey:が次のように検索されると記載されています。
- 受信機内で、、、および(この順序で)
-getMyKey
試行し-myKey
ます-isMyKey
見つからない場合は、次の順序付けられたto-manyゲッター(NSArray)を試行します。
// Required: - (NSUInteger)countOfMyKey; // Requires At Least One: - (id)objectInMyKeyAtIndex:(NSUInteger)index; - (NSArray *)myKeyAtIndexes:(NSIndexSet *)indexes; // Optional (improves performance): - (void)getMyKey:(KeyClass **)buffer range:(NSRange)inRange;
次に、これらの順序付けられていない多数のゲッター(NSSet)を試行します。
- (NSUInteger)countOfMyKey; - (NSEnumerator *)enumeratorOfMyKey; - (KeyClass *)memberOfMyKey:(KeyClass *)anObject;
次に、、、、、の順序でが
YES
返されると仮定して、インスタンス変数に直接アクセスしようとします。accessInstanceVariablesDirectly
_myKey
_isMyKey
myKey
isMyKey
最後に、それはあきらめて、受信クラスの
- (id)valueForUndefinedKey:(NSString *)key
メソッドを呼び出します。通常、ここでエラーが発生します。
私の質問は、mutableArrayValueForKeyの検索順序パターンは何ですか?
順序付けられたコレクションのアクセサー検索パターン
mutableArrayValueForKey:のデフォルトの検索パターンは次のとおりです。
受信者のクラスは、名前がパターン-insertObject:inAtIndex:および-removeObjectFromAtIndex:(それぞれ、NSMutableArrayプリミティブメソッドinsertObject:atIndex:およびremoveObjectAtIndex:に対応)に一致するメソッドのペア、またはパターン-insert:atIndexesに一致するメソッドを検索します。 :および-removeAtIndexes:(NSMutableArrayinsertObjects:atIndexes:およびremoveObjectsAtIndexes:メソッドに対応)。少なくとも1つの挿入メソッドと少なくとも1つの削除メソッドが見つかった場合、コレクションプロキシオブジェクトに送信される各NSMutableArrayメッセージは、-insertObject:inAtIndex:、-removeObjectFromAtIndex:、-insert:atIndexes:、および-removeAtIndexes:メッセージの組み合わせになります。 mutableArrayValueForKeyの元の受信者に送信されます:。...等...
「セッター」のような方法について話しているので、これは私には意味がありません。 mutableArrayValueForKey:
NSMutableArrayを返します。上記のすべてのメソッドはvoidを返し、NSMutableArrayを編集するために使用されますが、取得するためには使用されません。例:
- (void)insertMyKey:(KeyClass *)keyObject inMyKeyAtIndex:(NSUInteger)index;
- (void)removeObjectFromMyKeyAtIndex:(NSUInteger)index;
Appleが彼らのドキュメントで何を言おうとしているのか、あるいはこれがおそらくエラーであるのかどうか、何か考えはありますか?
私の理論では、KVC値を取得するために検索する場合mutableArrayValueForKey:
と同様のパスをたどる可能性があります。valueForKey:
それが実際にどのような道なのかよくわかりません。
あなたが提供できるどんな助けにも感謝します!:)