2011-12-09 3 views
1

私が知っているように、オーバーロードされたメソッド(カテゴリ)では、[super method]にコールして元のクラスに渡すことができます。 私の場合は、クラスのヘッダファイルを持っていないので、私は書く:obj-cカテゴリのオーバーロードされたメソッド:元のクラスに渡す方法?

@interface OriginalClass : NSObject 
@end 

@interface OriginalClass (overloadMethod) 
-(void) method; 
@end 

@implementation OriginalClass (overloadMethod) 
-(void) method 
{ 
    // some my code 
    [super method]; // here is warning that "NSObject may not respond to '-method' 
} 
@end 

だから、そのヘッダファイルをせずに正しくOriginalClassmethodを渡すことが可能ですか?おそらくmethod_setImplementationを見る方が良いでしょうか?

答えて

2

サブクラスではなくカテゴリを追加しています。カテゴリを追加するときは、既存のクラスに対して独自のメソッドをタックすると考えてください。メッセージをsuper(この場合はNSObject)に送信する代わりに、selfに送信してください。カテゴリを追加するクラスを実装しているとします。

私は私の記憶が正しければ、ドキュメント内にObjCプログラミングへのイントロは、あなたがオーバーライドするときと述べて...

+1

は、この問題に関する自分の無知を言い訳最初の答えではドキュメントからの引用だろうがない '[セルフ方式]'同じメソッドの再帰呼び出しの量? – Monolo

+0

Apple docsによると、カテゴリの「スーパー」は元のクラスを意味します。同じ質問が議論されますが、ここで解決されていません:http://stackoverflow.com/questions/1405060/using-super-in-an-objective-c-category – brigadir

+0

@モノロはい、そうです。だからこそ私はなぜカテゴリー内のメソッドをオーバーライドしているのか理解しようとしています。 –

関連する問題