UIViewControllerがあるとしましょう
@interface CustomController : UIViewController
@end
@implementation CustomController
- (void)myMethod {
//this is the problematic line. It calls viewDidLoad of ExtendedController
//but it should be calling viewDidLoad of CustomController
[self viewDidLoad];
}
- (void)viewDidLoad {
//and this line should call viewDidLoad from UIViewController
[super viewDidLoad];
}
そして、私はそれを拡張する別のものを持っています
@interface ExtendedController : CustomController
@end
@implementation ExtendedController
- (void)viewDidLoad {
[super myMethod];
}
ExtendedControllerが起動されると、ExtendedControllerのviewDidLoadが呼び出され、次にCustomControllerのmyMethodが呼び出され、次にExtendedControllerのviewDidLoadが呼び出されます。これは無限ループです。
CustomControllerのmyMethodが他のクラスではなくCustomControllerクラスのviewDidLoadを常に呼び出すようにするにはどうすればよいですか。
たとえば、Javaでは、この設定は期待どおりに機能するため、これは私にはあまり意味がありません。しかし、どういうわけか、iOSでクラスを拡張すると、「自己」の概念が失われます。
public class Hello extends Omg {
public void myMethod() {
//in Java, this method does indeed call "viewDidLoad" in "Hello"
this.viewDidLoad();
}
public viewDidLoad() {
//in Java, this method does indeed call "viewDidLoad" in class "Omg"
super.viewDidLoad();
}
}
public class ExtendedHello {
public void viewDidLoad() {
super.viewDidLoad();
}
}
iOSコードを修正して、期待される動作を得るにはどうすればよいですか?
更新:「viewDidLoad」は任意のメソッド名に置き換えることができることに注意してください...この質問は、それがviewDidLoadであるという事実とは何の関係もありません。
ありがとう!