ソースがない Objective C クラスのメソッドをオーバーライドしたいと考えています。
調べたところ、カテゴリでこれを実行できるように思われますが、古いメソッドの結果を取得するために super を使用して、新しいメソッドで古いメソッドの結果を使用したいと考えています。
ただし、これを試すたびに、メソッドが呼び出されますが、「スーパー」は nil です...理由はありますか? XCode 2.2 SDK を使用して iPhone 開発を行っています。私は間違いなくクラスのインスタンスで作業しており、クラスのメソッドはインスタンス メソッドです。
@implementation SampleClass (filePathResolver)
-(NSString*) fullPathFromRelativePath:(NSString*) relPath
{
NSString *result = [super fullPathFromRelativePath: relPath];
... do some stuff with the old result
return result;
}
注と説明: Apple Docs で確認できることから、これは許可されるべきだと思われますか?
カテゴリーのドキュメント (developer.apple.com): カテゴリーが継承されたメソッドをオーバーライドする場合、通常どおり、カテゴリー内のメソッドはスーパーへのメッセージを介して継承された実装を呼び出すことができます。ただし、カテゴリのクラスに既に存在するメソッドをカテゴリがオーバーライドする場合、元の実装を呼び出す方法はありません。