私はソースを持たないObjective Cクラスのメソッドをオーバーライドしたいと思います。Objective CカテゴリでSuperを使用していますか?
私はそれを調べましたが、カテゴリでこれを可能にするはずですが、古いメソッドの結果を取得するためにスーパーメソッドを使用して、新しいメソッドで古いメソッドの結果を使用したいと思います。
私はこれを試してみると、私のメソッドが呼び出されますが、 "スーパー"は何もありません...任意のアイデアなぜですか?私は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で見ることができますが、これは許可されるべきですか?カテゴリには継承されたメソッドをオーバーライドする場合
Categories docs at developer.apple.com: は、 カテゴリの方法は、通常通り、スーパーへのメッセージを介して 継承実装を呼び出すことができます。ただし、カテゴリ が、カテゴリのクラスにすでに が存在するメソッドをオーバーライドすると、 は元の の実装を呼び出すことができません。
あなたは今まで、この解決策を見つけますか?私はUILabelのsetText:メソッドに渡されるので、テキストパラメータを変更しようとしています。私はUILabel(巨大なコードベース)をサブクラス化したくないので、カテゴリーが最も適切かもしれません。 スーパーオブジェクトが実際にUILabelだったのであれば、super setTextを呼び出すことはおもしろいと思っていますが、そのカテゴリで定義されているsetText:を呼び出す無限ループにつながる可能性が非常に高いです。だから、これはおそらくカテゴリにとっては不可能な偉業であることは明らかです。 –
ねえ!私はこのページに掲載されているもの以外の解決策は見つけられませんでした。メソッドswizzling、またはカテゴリー内の別のメソッドを使用する;-( –