0

クラス A と、A のサブクラスであるクラス B があります。どちらにも次のメソッドがあります。

-(void)anotherMethod{
    // implementation of A or B
}

-(void)aMethod{
    @try{
        [super aMethod];
    }
    @catch(NSException *e){
    }
    [self anotherMethod];
}

今:Aの呼び出しの実装に含まれる[instanceOfClassB aMethod]命令を呼び出すと(オーバーライドされているため)、Aの呼び出しの代わりにBの呼び出しが行われます。A のcallの実装を A の の実装にするにはどうすればよいですか?[self anotherMethod]aMethodanotherMethodaMethodanotherMethod

4

3 に答える 3

0

これを試して:

if ([self isKindOfClass:[ClassB class]]) {
    [super anotherMethod];
} else {
    [self anotherMethod];
}
于 2012-12-18T10:48:02.940 に答える
0

これはあなたを助けるはずです:この人はあなたと同じ問題を抱えていました.

Objective-c: 基本クラスで [self message] を呼び出すと、子孫メソッドが呼び出されます

于 2012-12-18T11:09:32.587 に答える
0

解決策は、サブクラスの実装をスーパークラスの実装に置き換えるために、super を呼び出す前 (および直後) にメソッドの入れ替えを行うことです。ランタイムを「ハッキング」する必要がありますが、これより簡単なものは見つかりませんでした。そして、それは機能します。

于 2012-12-19T11:13:25.333 に答える