我被这个问题困扰了。 首先,我有一个A类,即父类。 B类继承自A类。 在A类中,我添加了一些通知的观察者:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActiveFromBackground) name:UIApplicationDidBecomeActiveNotification object:nil];
我用一些代码行填充方法“appDidBecomeActiveFromBackground”。
在B类中,我想对这个处理方法进行更改,所以我重写了这个方法。但实际上,在调用类 A 中的方法时,每次通知触发时,不会调用类 B 中同名的方法。
我该如何解决这个问题?
在 B 类的方法中,我不调用 [super appDidBecomeActiveFromBackground];
因为我想要不同的实现。
编辑:来自下面的评论
- (void)appDidBecomeActiveFromBackground {
//-to be define
DEBUGLog(@"did become active");
WFFogSponsorVC *fogSponsorVC = [[[WFFogSponsorVC alloc] init] autorelease];
[self presentModalViewController:fogSponsorVC animated:NO];
}
我在父类(基类)的viewDidLoad方法中注册观察者,并在viewWillDisappear中删除观察者注册以防止多个观察者。
我还想知道如果注册已在父类中实现,如何删除子类中的观察者注册?
最佳答案
当感兴趣的事件发生时,通知中心将通知自己注册的对象以获得通知。在您的情况下,只有父类对 UIApplicationDidBecomeActiveNotification 通知感兴趣,因为只有父类已注册为观察者,而不是子类。因此,当感兴趣的事件发生时,只有父类会收到通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActiveFromBackground) name:UIApplicationDidBecomeActiveNotification object:nil];
上面的通知注册代码中addObserver:self
代表的是父类而不是子类。
关于iphone - 重写子类中的观察者方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17988096/