一般に、オブジェクトが特定のキーの値を持っているかどうかを判断する方法はありません。-valueForUndefinedKey:
インスタンスは、それ以外の場合は未定義のキーの値をそのメソッドから返すことを決定する場合があります。または、デフォルトの実装が例外をスローする可能性があります。最新の Objective-C (2.0) オブジェクトは、多くの場合、パブリック API で関連するプロパティを宣言します。これらのオブジェクトについては、Objective-C ランタイムのclass_copyPropertyList
またはprotocol_copyPropertyList
を使用して、使用可能なプロパティのリストを取得できます。KVC 検索リストをエミュレートしてrepondsToSelector:
、インスタンスが適切な getter メソッドに応答するかどうかをテストすることもできます。最後に、ランタイムを使用しclass_copyIvarList
て、適切な ivar の ivar をチェックできます。これはあなたがしてはいけない多くの仕事です. valueForKey:
メッセージが送信されたときにオブジェクトインスタンスが例外を発生させるかどうかを知ることは保証されず、より大きな問題を示しています...
特定のキーの値をすべて提供する必要があるオブジェクトのコレクションがあり、一部のオブジェクトがそうでない場合は、設計上の問題があります。必要なプロパティを宣言する適切なインターフェイス ( @protocol
Objective-C の a) を定義する必要があります。次に、このプロトコルへの準拠をテストするか、コンパイラを使用してコンパイル時の型チェックを行い、インスタンスがプロトコルに準拠していることを確認します (単一のインスタンスを渡す場合)。