首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重写子类中的观察者方法

重写子类中的观察者方法
EN

Stack Overflow用户
提问于 2013-08-01 15:50:46
回答 2查看 469关注 0票数 0

我被这个问题卡住了。首先,我有一个A类,那就是家长类。类B继承自类A。在类A中,我添加了一些通知的观察者:

代码语言:javascript
运行
复制
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActiveFromBackground) name:UIApplicationDidBecomeActiveNotification object:nil];

我用几行代码填充了"appDidBecomeActiveFromBackground“方法。在类B中,我想对这个处理方法进行更改,所以我覆盖了这个方法。但实际上,类B中具有相同名称的方法并不是每次触发通知时都会调用,而类A中的方法则会被调用。我该如何解决这个问题呢?在类B的方法中,我没有调用[super appDidBecomeActiveFromBackground];,因为我想要一个不同的实现。

编辑:来自下面的评论

代码语言:javascript
运行
复制
- (void)appDidBecomeActiveFromBackground { 
     //-to be define 
     DEBUGLog(@"did become active"); 
     WFFogSponsorVC *fogSponsorVC = [[[WFFogSponsorVC alloc] init] autorelease]; 
     [self presentModalViewController:fogSponsorVC animated:NO]; 
}

我在父类(基类)的viewDidLoad方法中注册了观察者,并在viewWillDisappear中删除了观察者注册,以防止多个观察者。

我还想知道,如果观察者注册已经在父类中实现,如何删除子类中的观察者注册?

EN

回答 2

Stack Overflow用户

发布于 2013-08-01 16:38:32

通知中心将通知注册了自己的对象,以便在感兴趣的事件发生时得到通知。在您的示例中,只有父类对UIApplicationDidBecomeActiveNotification通知感兴趣,因为只有父类注册为观察者,而不是子类。因此,当感兴趣的事件发生时,只会通知父类。

代码语言:javascript
运行
复制
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActiveFromBackground) name:UIApplicationDidBecomeActiveNotification object:nil];

在上面的通知注册代码中,addObserver:self代表父类而不是子类。

票数 1
EN

Stack Overflow用户

发布于 2013-08-01 16:40:20

尝试在B类中注册观察者。这样,每次应用程序激活时,它都会被调用。

在你的B类appDidBecomeActiveFromBackground方法中,你应该调用超级appDidBecomeActiveFromBackground。

B类

代码语言:javascript
运行
复制
- (void)appDidBecomeActiveFromBackground {      
    [super appDidBecomeActiveFromBackground];
    //Do your another stuff here
}

A类

代码语言:javascript
运行
复制
- (void)appDidBecomeActiveFromBackground {      
    //-to be define 
    DEBUGLog(@"did become active"); 
    WFFogSponsorVC *fogSponsorVC = [[[WFFogSponsorVC alloc] init] autorelease]; 
    [self presentModalViewController:fogSponsorVC animated:NO]; 
}

这样,两个类的代码都将运行,并且您必须注册一次观察者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17988096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档