iphone - 重写子类中的观察者方法

标签 iphone ios objective-c ipad

我被这个问题困扰了。 首先,我有一个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/

相关文章:

iphone - 如何以编程方式创建 iOS 应用程序 View

objective-c - 带有动画的 iOS 方法调用,完成时执行操作?

iphone - 在 iOS 应用程序中下载大文件

iphone - 如何从 google place API 中的地点 ID 查找纬度和经度

ios - 如何在 Xcode 8 中重新排序 UITabBarController 中的关系序列

ios - 应用程序在未从 Xcode 运行时自动关闭

ios - 快速连接反斜杠

objective-c - NSTableView 和数据验证?

iphone - iOS UITabBar : Remove top shadow gradient line

iphone - 在 UIAlertView 中添加 UIActivityindicatorView