2011-12-16 4 views
9

少しハッキリしたいことがあります。すべてのセレクタコールをキャッチし、実行時にリダイレクトすることは可能ですか?

クラスが定義されていないクラスでメソッドを呼び出すと、通常はエラーが発生します。

// We get a undefined selector callback 
[myClass someUndefinedMethod]; 

私はそれを持つすべてのこれらの未定義のメソッド呼び出しやお得な情報をキャッチMyClassに何かを追加したいです。これは可能ですか?

私はこのような何かをしたいが、すべてのメソッドをインターセプトした呼び出します。

@implementation MyClass 

    - (void) performSelector(SEL):selector { 

      // Check if the method exists 
      if (![self respondsToSelector:selector]) { 
       // Handle unimplemeted selector 
       NSLog(@"No method called %@", selector); 
      } 

      // Otherwise proced as normal 
      else { 
       [super performSelector:selector]; 
      } 
    } 

@end 

答えて

11

NSObjectのdoesNotRecognizeSelector:メソッドをオーバーライドしないでください(あなたが継承していると仮定します)。

+0

パーフェクト。これは私が探していたものです。私は道があることを知っていました。 – Robert

+0

@paulbaileyあなたは幸運にも2分後に同じ答えを返してくれました。あなたの答えは受け入れられました:) – Sulthan

+0

すべてのリンクについて... ;-) – paulbailey

0

は、私はあなたがしようとすると「NSObjectの」のための新しいカテゴリを作成し、そのようなその特定のメソッドを上書きすることができますね。とにかく、Appleはメソッドを上書きするカテゴリを使わずに新しい機能を追加することを推奨しているので、ちょっとハックしていることを覚えておいてください。しかし、私はwarnningを取り除くということはよく分からない...

7

オーバーライドメソッド: -[MyClass doesNotRecognizeSelector:] とあなたが望むものは何でも呼び出します。

これはNSManagedObjectがコアデータプロパティを取得/設定するための処理です。

1

クラスまたはクラスのインスタンスに送信されたメッセージを傍受しようとしているかどうかはわかりません。いずれにしても、「メッセージ転送」および「メッセージ転送」のトピックを調べたり、検索したりすることがあります。また、NSObjectののforwardInvocation及びこれらは私が探していた答えに私を得た http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtForwarding.html

メッセージ転送にAppleのランタイムpgmgガイドのセクションを参照してくださいと私は彼らが他の場所でこの質問に言及表示されませんでした。

+0

私はこれが受け入れられた解決策よりも優れていると思います。 – huggie

関連する問題