EOKVCImplementation
2007/03/30 (Fri) 22:07:46 JST
Key-Value Codingの仕組み
属性の検索
KVCはキーに対するアクセサメソッドとインスタンス変数を順に検索します。 メソッド名・変数名はコーディングスタイルや目的によって名前が微妙に異なることがありますが、KVCではそれを考慮して次の複数のパターンを候補にします。
- キーと同名
- キーの接頭辞に
get
をつける - キーの接頭辞に
is
をつける
ここからさらに「接頭辞にアンダースコアがつくか」「メソッドかインスタンス変数か」の各パターンを検索します (※ドキュメントではアンダースコアがつかないアクセサを「パブリック」、つくアクセサを「プライベート」としています。 ここではJava言語仕様の可視性と区別するため、単にアンダースコアの有無とします)。 まとめると次の順序で検索されます。
- アンダースコアのつかないメソッド(
getKey(), key(), isKey()
) - アンダースコアのつくメソッド(
_getKey(), _key(), _isKey()
) - アンダースコアのつくインスタンス変数(
_key, _isKey
) - アンダースコアのつかないインスタンス変数(
key, isKey
)
キーが見つからないとき
どのメソッド・インスタンス変数も見つからない場合、?NSKeyValueCoding.?ErrorHandlingインターフェースを実装(implements)していれば handleQueryWithUnboundKey()
, handleTakeValueForUnboundKey()
が呼ばれます。 デフォルトの実装では例外?NSKeyValueCoding.?UnknownKeyExceptionが発生するようになっています。
Inverse Pages: WebObjects基礎研究室