0

このメソッドに- (void)viewWillAppear:(BOOL)animated追加するすべての ViewControllerをオーバーライドする必要があります。NSLog(@"blabla")つまり、viewWillAppear を呼び出すたびに、viewWillAppear + 私の NSLog メッセージの実装された早期認識が呼び出されます。出来ますか?はいの場合、アドバイスをお願いします。

現在、私はこのコードを試しました

@implementation RuntimeTest

IMP previusImp;
IMP newIMP;
- (void)ovverrideViewWillAppearInViewController:(Class)vcClass {
    newIMP = class_getMethodImplementation([self class], @selector(viewWillAppear:));
    Method viewWillAppearMethod = class_getInstanceMethod(vcClass, @selector(viewWillAppear:));
    previusImp = method_setImplementation(viewWillAppearMethod, newIMP);
}

- (void)viewWillAppear:(BOOL)animated {
    previusImp(self, @selector(viewWillAppear:), animated);
    NSLog(@"log2");
}

@end

で、〜がある

@implementation IRViewController2

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"log");
}

@end

私のカスタムviewWillAppearは最初に呼び出し、viewWillAppear次にIRViewController2. この後、私のアプリケーションは EXC_BAD_ACCESS でクラッシュします。どうしたの?

4

1 に答える 1