didReceiveRemoteNotification 从 tabbarcontroller 推送视图控制器
Posted
技术标签:
【中文标题】didReceiveRemoteNotification 从 tabbarcontroller 推送视图控制器【英文标题】:didReceiveRemoteNotification push viewcontroller from tabbarcontroller 【发布时间】:2013-10-14 19:07:03 【问题描述】:我有一个接收推送通知的应用程序。
在我的故事板中,我有一个标签栏控制器,它有 4 个详细视图(嵌入了导航控制器)。
当我收到推送时,我可以设置正确的标签栏控制器。但我想把整条线都放到我的详细视图中。
NSString *storyboardId = @"TabFirst";
self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:storyboardId];
UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController;
tabBar.selectedIndex = 2;
有了这个,我得到了正确的 tabview。但是我怎样才能将它推送到正确的细节视图呢?而且我还需要用它发送一个对象(这样它就可以显示正确的数据)。
谢谢。
【问题讨论】:
我的应用委托中有此代码,didReciveRemoteNotification 方法。 请解释一下“从整条线到我的详细视图”?? 【参考方案1】:我认为您还没有正确理解 UINavigationBarController。它就像一个堆栈,您可以在其中推送和弹出元素。
是否有可能将第 8 个元素直接压入堆栈,而堆栈中没有前 7 个元素??
您需要创建每个视图控制器的实例并通过您的算法手动推送它。
-(void)didReciveRemoteNotification [tabBarController.viewcontroller objectAtIndex:2/*导航控制器的索引*/]; // 一旦你获得了对导航的引用,你必须推送你的根视图控制器并调用 // 在每个执行转换的视图控制器上调用消息。 UITableViewController *tableVC = [[UITableViewController alloc] init]; [self.navigationController pushViewController:tableVC]; // 只需一条消息即可触发您的事件,并让每个视图 // 控制器加载它连续的视图控制器。 [tableVC didSelectRowAtIndex .. ];这也会加载您的数据。简而言之,您需要触发用户遵循的事件链。但是您将获得来自推送通知的数据,该数据将告诉您如何加载这些视图。如果您适当地遵循了chain of responsibility patter 或 MVC 模式,通常应该不难触发这一系列事件。如果这对您来说很难,那么您设计控制器的方式就有问题。
总结:根据从推送通知接收到的数据,通过消息链加载应用程序的状态。
注意:另外,如果您发现其他可能破坏系统不变性的方法
【讨论】:
以上是关于didReceiveRemoteNotification 从 tabbarcontroller 推送视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
尽管 content_available = true,但没有在后台调用 didReceiveRemoteNotification