推送到 didReceiveRemoteNotification 上的视图

Posted

技术标签:

【中文标题】推送到 didReceiveRemoteNotification 上的视图【英文标题】:Pushing to a view on didReceiveRemoteNotification 【发布时间】:2010-11-24 12:05:38 【问题描述】:

当 iPhone 应用程序在后台运行并收到远程通知时。所以它将执行didReceiveRemoteNotification 回调。在那我将推送到一个新的UIViewController。但在此之前,它注意到它调用了applicationWillEnterForeground 回调。

我也在使用模态对话框进行一些位置更新。因此,当此通知到达时,这两种情况都会发生并且应用程序正在崩溃。那么有什么方法可以阻止applictiaonWillEnterBackground 处理远程通知。由于这一刻有点困难,因为这个处理是在applicationWillEnterBackground 控制器之后完成的。

谢谢。

【问题讨论】:

【参考方案1】:

回调application:didReceiveRemoteNotification: 仅应在应用程序在前台运行时调用。在后台运行时,您应该拨打application:didFinishLaunchingWithOptions: 的电话。

由于您提出问题并且还使用核心位置,因此可能会在应用程序处于后台时调用application:didReceiveRemoteNotification:,但我认为这将是一个错误。至少根据 Apple 的文档。

无论如何,不​​,你不能阻止applicationWillEnterForeground:。如果你不知道你在不同的回调中到底在做什么,我建议你在applicationWillEnterForeground: 中设置一个标志,如果你在那里做某事,然后在application:didReceiveRemoteNotification: 中检查该标志

- (void)applicationWillEnterForeground:(UIApplication *)application 
  if (somehingHappend) 
    somethingHappended = YES;
  


- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
  if (!somethingHappened) 
    // push your view controllers or whatever
  

其中somethingHappenedBOOL,定义在与 ivar 相同的类中。

【讨论】:

感谢您的回复罗伯特。实际上,当收到推送通知时会显示警报消息。当我单击警报消息的查看按钮时,它将在 didReceiveRemoteNotification 之后触发 applicationWillEnterForeground。因此,如果它像其他方式一样,我会使用布尔标志。但是,如果它在后台运行,它会在单击视图按钮时调用 didFinishLaunchingWithOptions 吗? 是的,这是应该发生的。我自己只尝试使用本地通知,但根据文档,application:didReceiveRemoteNotification: 应该只有在应用程序在前台时才被调用。 是的,这是因为应用程序在多任务中运行。所以 didReceiveRemoteNotification 将被调用。

以上是关于推送到 didReceiveRemoteNotification 上的视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将某个函数推送到返回数组的函数?(是否可以推送到返回数组的函数)[关闭]

如何将指标直接推送到 Cortex

最好用正确的值实例化对象然后推送到向量,或者实例化,推送到向量然后设置正确的值?

Docker---本地镜像推送到阿里云

如何使用 AWS Kinesis Firehose 将嵌套结构推送到 Redshift

从 Databricks 将日志推送到 Log Analytics