延迟处理本地通知激发的策略

  • 本文关键字:策略 通知 处理 延迟 ios
  • 更新时间 :
  • 英文 :


我的应用程序从服务器下载内容,一旦完成,它就会解析其内容,任何人都可以显示它。如果它显示了它,那么VC就会被推到导航堆栈上。

在处理内容的过程中,可能需要安排本地通知。当通知触发时,VC也被推到导航堆栈上以显示一些内容。

我有一个问题,本地通知立即过期-问题是在这种情况下,第二个VC的推送发生在第一个VC推送的viewDidPeare:执行之前。

我可以检测到通知是否会立即到期并添加延迟-但这似乎并不理想(添加计时器来解决问题从来都不是一个很好的解决方案IMO,添加多少延迟,如果在大多数情况下(但不是所有情况下)延迟足够多怎么办,所以让它更长时间来补偿,但第二个VC的推送可能会延迟,等等)

当通知触发时,我可以查看VC是否已被推送,如果是,它的viewDidAppear:是否已被调用,如果没有,则等待处理通知。

这是可行的,但要跟踪VC推送是否处于/处于什么阶段有点麻烦。有没有更优雅的解决方案?我宁愿避免在应用程序中添加另一个队列。

如果真的没有任何替代方案,那么延迟处理通知的选项是什么?例如,它们是否真的会与操作系统一起重新安排,以便在下一个运行循环中执行(这应该会给viewDidPeare:执行的机会)?

或者有必要使用navigationController:didShowViewController:animated:并检查和处理其中的通知队列吗?

还有其他选择吗?

感谢

你可以试试这个

- (void)pushVC {
    @synchronized (self) {
        HomeViewController *vc = [[[HomeViewController alloc] init] autorelease];
        [self.navController pushViewController:vc animated:YES];
    }
}
- (void)processLocalNotification:(UILocalNotification *)notification {
    [self performSelector:@selector(pushVC) withObject:nil afterDelay:2.0f]; // delay for animation
}

另一种方法,检查现有通知,如果新通知太近,只需添加一些时间

UIApplication *app = [UIApplication sharedApplication];
for (UILocalNotification *notification in [app scheduledLocalNotifications]) {
}

最新更新