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 に答える