gpt4 book ai didi

ios - 远程推送通知在另一个 View Controller 中接收

转载 作者:行者123 更新时间:2023-11-29 12:27:40 26 4
gpt4 key购买 nike

我是 iOS 开发的新手,我不太了解如何确保 View Controller 收到推送通知,无论 View 是否打开。

基本上,我想要的是使用推送通知消息更新的 View Controller 界面。

我有一个这样设置的 Storyboard:

导航 Controller --> View Controller 1 --> View Controller 2 --> View Controller 3

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

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

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

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

在我的应用委托(delegate)文件中,方法: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 我希望它即使在未加载 View 时也能收到通知。

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

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

我还为 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];
}

最佳答案

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

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

关于ios - 远程推送通知在另一个 View Controller 中接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28618938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com