远程推送通知在另一个视图控制器中接收

Remote Push Notifications receive in another view controller

我是 iOS 开发的新手,我在理解如何确保视图控制器收到推送通知而不管视图是否打开时遇到了一些困难。

基本上,我想要的是使用推送通知消息更新的视图控制器界面。

我有一个这样设置的故事板:

导航控制器 --> 视图控制器 1 --> 视图控制器 2 --> 视图控制器 3

我希望 View Controller 3 得到更新。但是,在我的应用程序委托中——它接收远程通知。所以,它知道消息是什么。

我已经尝试了几种方法,只有当它的视图控制器位于前台并且用户正在查看该视图时,我才能让 View Controller 3 更新。

但是,如果用户在 View Controller 1 上——那么当我收到推送通知并转到 View Controller 3 时——它不会更新数据。

我唯一的假设是视图控制器 3 已被释放,因为视图尚未加载。因此,它无法收听通知。如何让 View Controller 3 监听远程通知?我是否必须在我的应用程序委托文件中对它进行某种引用?如果是这样,我该如何设置?

在我的应用委托文件中,方法:didReceiveRemoteNotification:

[[NSNotificationCenter defaultCenter] postNotificationName:messageNotificationName object:nil userInfo:userInfo];    

在我的 View Controller 3 viewDidLoad 方法中,我注册了通知:

// register to find out when push notifications are received.
NSNotificationCenter * notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
                       selector:@selector(notificationRecieved:)
                           name:messageNotificationName
                         object:nil];     

目前,我还没有注销通知 -- b/c我希望它即使在未加载视图时也能收到通知。

如有任何帮助或建议,我们将不胜感激。

我一直在阅读 Apple 本地和远程通知指南。 我还在 Whosebug 上研究了 TON,试图找到对我有帮助并为我指明正确方向的东西。

我还为 didFinishLaunchingWithOptions 编写了一些代码,以防应用程序从通知中打开。

    NSDictionary *notif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

//Accept push notification when app is not open
if (notif) {
    // Extract the payload
    NSDictionary *tempDict = [notif valueForKey:@"aps"];

    [[NSNotificationCenter defaultCenter] postNotificationName:messageNotificationName object:nil userInfo:tempDict];


    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

    ViewController3 *controller = (ViewController3*)[mainStoryboard instantiateViewControllerWithIdentifier: @"ViewController3"];

    [navigationController pushViewController:controller animated:YES];
}

您的 post 在 ViewController3 之前发送通知似乎已被实例化。如果您在 post 通知和设置通知监听器时放置断点,您会注意到监听器是在通知触发后设置的。

从架构上讲,您可能根本就没有通知。只需更新您的数据模型,然后让 ViewController3 利用您的数据模型来填充它的视图。