1

Appdelegate.m に postNotification メソッドを追加

   - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

         if(application.applicationState == UIApplicationStateBackground) {

[[NSNotificationCenter defaultCenter] postNotificationName: @"SuggetionPushNotification" object:nil userInfo:userInfo];


              AppDelegate *appDel = (AppDelegate *)[[UIApplication sharedApplication] delegate];

                        SideMenuViewController *leftMenuViewController = [[SideMenuViewController alloc] init];
                        MFSideMenuContainerViewController *container = [MFSideMenuContainerViewController
                                                                        containerWithCenterViewController:[[UINavigationController alloc]
                                                                                                           initWithRootViewController:[[SuggetionViewController alloc] init]]
                                                                        leftMenuViewController:leftMenuViewController
                                                                        rightMenuViewController:Nil];

                         [self.window makeKeyAndVisible];
                        appDel.window.rootViewController = container;

                 }


                    }

ViewController B (SuggetionViewController) in viewDidLoad

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



- (void) receiveTestNotification:(NSNotification *) notification {
    NSLog(@"working");

}

しかし、ここでは通知をまだ起動していません。同じクラスに post と addobserver の両方を追加した場合は、それだけが起動します。私が犯した間違い。Objective-C の NSNotificationCenter を介してメッセージを送受信するから参照しましたか? 助けてください

4

5 に答える 5

2

コントローラーBが通知を監視できない理由である通知を投稿しているときに、ビューコントローラーBがメモリにありません。通知を投稿する前に遅延を追加すると役立ちます。

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
  [[NSNotificationCenter defaultCenter] postNotificationName: @"SuggetionPushNotification" object:nil userInfo:nil];

});
于 2016-05-18T09:44:32.633 に答える
0

SuggetionViewController現在読み込まれている場合、内部で通知を受け取ることはできません。
viewDidLoad にオブザーバーを追加すると、SuggetionViewControllerロードされていないときにリモート通知を受信する可能性があります。

通知を処理する前に、コントローラーがロードされていることを確認する必要があります。

于 2016-05-18T11:51:57.693 に答える