推送到 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
其中somethingHappened
是BOOL
,定义在与 ivar 相同的类中。
【讨论】:
感谢您的回复罗伯特。实际上,当收到推送通知时会显示警报消息。当我单击警报消息的查看按钮时,它将在 didReceiveRemoteNotification 之后触发 applicationWillEnterForeground。因此,如果它像其他方式一样,我会使用布尔标志。但是,如果它在后台运行,它会在单击视图按钮时调用 didFinishLaunchingWithOptions 吗? 是的,这是应该发生的。我自己只尝试使用本地通知,但根据文档,application:didReceiveRemoteNotification:
应该只有在应用程序在前台时才被调用。
是的,这是因为应用程序在多任务中运行。所以 didReceiveRemoteNotification 将被调用。以上是关于推送到 didReceiveRemoteNotification 上的视图的主要内容,如果未能解决你的问题,请参考以下文章
如何将某个函数推送到返回数组的函数?(是否可以推送到返回数组的函数)[关闭]
最好用正确的值实例化对象然后推送到向量,或者实例化,推送到向量然后设置正确的值?