メソッドの具体的な実装を(オーバーライドされていても)カテゴリから呼び出す必要があります。出来ますか? (念のために:は、私が知っている、Objective-Cの中のすべてのメソッドは、仮想です。)これはあなたの問題を解決することがありObjective-Cの非仮想メソッド
// class A
@interface A
- (void)foo;
@end
@implementation A
- (void)foo
{
NSLog(@"initial foo");
}
@end
// subclass of A
@interface A1: A
@end
@implementation A1
- (void)foo
{
NSLog(@"overridden foo");
}
@end
// category to A
@interface A (Category)
- (void)bar;
@end
@impletemtation A (Category)
- (void)bar
{
[self foo]; // probably, I should specify here what exactly must be self
// but I don't know how
}
@end
/////////////////////////////////////////////////////////////////
A1 *a = [[A1 alloc] init];
[a bar]; // now the "overridden foo" string will be printed
// my goal is to print "initial foo" !!!
あなたは本当にそのようなカプセル化を破るしますか? – Sulthan
まだ分かりません。それにもかかわらず、私は理論的に可能かどうかを知りたいと思っています。 –
これは巨大なコードの臭いですが、あなたは '[super foo];を試しましたか? – vikingosegundo