【发布时间】:2013-05-09 11:34:58
【问题描述】:
我需要覆盖- (void)viewWillAppear:(BOOL)animated,以便在此方法中添加NSLog(@"blabla") 的所有ViewController。 IE。在每次调用 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 首先调用,然后从 IRViewController2 调用 viewWillAppear。在此之后,我的应用程序因 EXC_BAD_ACCESS 而崩溃。怎么了?
【问题讨论】:
-
也许我说得不清楚。请查看更新后的问题。
-
你应该发布你的崩溃日志,或者至少是其中的一部分。
-
很遗憾,崩溃日志是清晰的。
-
从应用程序中所有其他控制器继承的巫婆创建自定义视图控制器方法,当您调用 super viewwillappear 时,父方法中的 viewdidappear 将在您的子控制器中的 viewdidappear 之前被调用,只需添加一个父方法内部也是超级的
标签: iphone ios objective-c runtime objective-c-runtime