0

我被困在这个问题上。首先,我有一个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 中删除观察者注册以防止多个观察者。

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

4

2 回答 2

1

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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActiveFromBackground) name:UIApplicationDidBecomeActiveNotification object:nil];

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

于 2013-08-01T08:38:31.580 回答
0

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

在您的 B 类 appDidBecomeActiveFromBackground 方法中,您应该调用 [super 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]; 
}

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

于 2013-08-01T08:40:19.860 回答