0

リモート通知を受け取るたびに、アプリでローカルに通知を投稿しています。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSLog(@"Received notification: %@", userInfo);
    [[NSNotificationCenter defaultCenter] postNotificationName:@"NEWMESSAGE" object:nil userInfo:userInfo]; }

関数 viewWillAppear() でビューにオブザーバーを追加し、viewWillDisappear() でオブザーバーを削除しました。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newMessageReceived:) name:@"NEWMESSAGE" object:nil];

and
[[NSNotificationCenter defaultCenter] removeObserver:self];

私の質問は、アプリでこれらの関数を使用するすべての *.m ファイルで、すべての viewWillAppear および viewWillDisappear 関数をオーバーライドしたいということです。

または、現在のビューにオブザーバー (上記のように) を動的に追加し、そのビューが消えたときにオブザーバーを削除するにはどうすればよいですか。ビューが変更されたときにオブザーバーが追加され、再び変更されたときに削除されるたびに、グローバルアクションのようにする必要があります。

これは可能ですか?もしそうなら、私を導いてください。

前もって感謝します。

4

1 に答える 1

2

いくつかの考え:

  • UIViewController をサブクラス化し、これらのメソッドをサブクラス化されたビュー コントローラー クラスに実装できます。次に、すべてのビューをこの UIViewController のサブクラスとして作成する必要があります。

例:

//Creating a custom subclass of UIViewController
@interface CustomViewController : UIViewController
@end

@implementation CustomViewController

 - (void)viewWillAppear:(BOOL)animated
{
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newMessageReceived:) name:@"NEWMESSAGE" object:nil];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

@end

そして、すべての View Controller を のサブクラスとして作成しますCustomViewController

于 2013-07-23T10:16:41.650 に答える