2

接收推送通知 (didReceiveRemoteNotification) 时,如何将通知处理从应用程序委托传递给视图控制器?这对于在视图上显示警报很有用。发布视图或其他相关内容。

AppDelegate.m 的伪代码示例:

- (void)application:(UIApplication*)application didReceiveRemoteNotification (NSDictionary*)userInfo{
NSLog(@"Received notification: %@", userInfo);
// Here send the userInfo or other data to the appropriate view controller for handling it there (for example showing an alert there) //
 }
4

1 回答 1

3

确实没有理由在应用程序周围传递 didReceiveNotification。它打算处理一次;话虽如此,我不确定您为什么要传递代表。

如果您想将视图控制器推到其他所有内容之上(我不知道您的视图层次结构,所以我不知道这是否真的是您会使用的东西),您也许可以执行以下操作:

[[self.window rootViewController] presentViewController:[[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil] animated:YES completion:^{}];

这段代码只是在一切之上抛出一个模态视图。

或者,如果出于某种原因,您确实需要在更多地方处理通知,而不仅仅是应用程序委托,您可以做两件事:

代表模型

在 AppDelegate 标头中创建一个新的委托协议,并将其设置为您希望的任何处理程序 - 不利的一面是(如上所述)是一次只有一个对象可以侦听委托

@protocol MyNotificationDelegate <NSObject>
@required
    -(void) applicationDidReceiveRemoteNotification: (NSDictionary*)userInfo;
@end

发布通知

尽可能多的对象可以收听此通知;在你想听的对象中:

AppDelegate *appDel = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"ReceivedNotification" object:appDel];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationReceived:) name:@"ReceivedNotification" object:appDel];

并添加功能:

-(void)notificationReceived :(NSNotification *)localNot{
    NSLog(@"userInfo from push: %@",localNot.userInfo );
}

在您的应用程序委托回调中:

- (void)application:(UIApplication*)application didReceiveRemoteNotification: (NSDictionary*)userInfo{
    NSLog(@"Received notification: %@", userInfo);
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ReceivedNotification" object:self userInfo:userInfo];
}
于 2013-07-31T18:43:54.457 回答