我被这个问题卡住了。首先,我有一个A类,那就是家长类。类B继承自类A。在类A中,我添加了一些通知的观察者:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActiveFromBackground) name:UIApplicationDidBecomeActiveNotification object:nil];我用几行代码填充了"appDidBecomeActiveFromBackground“方法。在类B中,我想对这个处理方法进行更改,所以我覆盖了这个方法。但实际上,类B中具有相同名称的方法并不是每次触发通知时都会调用,而类A中的方法则会被调用。我该如何解决这个问题呢?在类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中删除了观察者注册,以防止多个观察者。
我还想知道,如果观察者注册已经在父类中实现,如何删除子类中的观察者注册?
发布于 2013-08-01 16:38:32
通知中心将通知注册了自己的对象,以便在感兴趣的事件发生时得到通知。在您的示例中,只有父类对UIApplicationDidBecomeActiveNotification通知感兴趣,因为只有父类注册为观察者,而不是子类。因此,当感兴趣的事件发生时,只会通知父类。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActiveFromBackground) name:UIApplicationDidBecomeActiveNotification object:nil];在上面的通知注册代码中,addObserver:self代表父类而不是子类。
发布于 2013-08-01 16:40:20
尝试在B类中注册观察者。这样,每次应用程序激活时,它都会被调用。
在你的B类appDidBecomeActiveFromBackground方法中,你应该调用超级appDidBecomeActiveFromBackground。
B类
- (void)appDidBecomeActiveFromBackground {
[super appDidBecomeActiveFromBackground];
//Do your another stuff here
}A类
- (void)appDidBecomeActiveFromBackground {
//-to be define
DEBUGLog(@"did become active");
WFFogSponsorVC *fogSponsorVC = [[[WFFogSponsorVC alloc] init] autorelease];
[self presentModalViewController:fogSponsorVC animated:NO];
}这样,两个类的代码都将运行,并且您必须注册一次观察者。
https://stackoverflow.com/questions/17988096
复制相似问题