![](/img/trans.png)
[英]How to Open a Notification view controller when a iOS push notification is received?
[英]iOS - Display view after push notification is received
我正在开发一个主UI基于选项卡栏控制器的应用程序。
在其中一个标签中,我有一个收集视图,可通过导航控制器向下钻取到详细视图。
我想做的是在收到推送通知后,我想选择此特定选项卡,从服务器中获取最新数据,找到要显示的特定项目,然后将详细信息视图推送到屏幕上以显示该项目。
我的问题是在collectionView:didSelectItemAtIndexPath之后收到以下消息:
由于未捕获的异常“ NSGenericException”而终止了应用程序,原因:“找不到针对“ FavouriteItem”的导航控制器。 仅当源控制器由UINavigationController的实例管理时,才可以使用推送选择。
到目前为止,这是我正在做的事情:
应用程序委托应用程序:didReceiveRemoteNotification:
[self selectFavouritesTab];
NHFavouritesViewController *favouritesViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"Favourites"];
[favouritesViewController displayFavouriteForPushNotificationWithId:favouriteId];
从FavouritesViewController-获取最新的收藏夹后,我向displayFavouriteItemWithId发送一条消息:
- (void)displayFavouriteItemWithFavouriteId:(NSNumber*)favouriteId
{
NSArray* results = [_collectionViewData filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.favouriteId == %@", favouriteId]];
NSInteger row = [_collectionViewData indexOfObject:[results lastObject]];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
[[self collectionView] selectItemAtIndexPath:indexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];
[self.collectionView.delegate collectionView:self.collectionView didSelectItemAtIndexPath:indexPath];
[self performSegueWithIdentifier:@"FavouriteItem" sender:self];
}
就在这时它崩溃了。 我了解崩溃消息在说什么,但是当我响应应用程序委托中的推送通知时,我不知道如何将NHFavouritesViewController放置在导航控制器中(该控件嵌入在情节提要中)。
您遇到的问题是您没有实例化导航控制器。
通过使用该方法加载收藏夹视图,您实际上只是在创建那个视图控制器。
因此,当您告诉它推送时,不能这样做,因为您没有从情节提要中实例化导航控制器。
导航控制器可能已经存在,因此您需要掌握它,而不是创建新的控制器。
我现在正在移动设备上,因此无法完全回答,但请告诉我您是否仍在挣扎中,我将看看是否可以为代码做广告。 可能需要先查看更多代码。
您可以使用以下方法将视图控制器包装在标准导航控制器中:
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:favouritesViewController];
但是我从上面的代码中看不到tabBarController中如何显示favouritesViewController。 如果要在情节提要中执行此操作,则只需将其拖动到空白的导航控制器中,将tabBarController的相关选项卡钩到导航控制器上(按Ctrl并拖动,然后选择“ Relationship segue:viewControllers”,然后从导航控制器中钩住到您的FavouritesViewController(同样)。
编辑:
如果在情节NHFavouritesViewController
已完成此操作,则需要修改代码以使用NHFavouritesViewController
的现有版本,而不是实例化新版本。 像这样(假设您在self.tabBarController
引用了标签栏控制器,并且favouritesViewController
在索引为favouritesTab
的标签中(由于您已经有了选择标签的方法,我想可以得到它们):
UINavigationController *navController = (UINavigationController *)self.tabBarController.viewControllers[favouritesTab];
NHFavouritesViewController *favouritesViewController = (NHFavouritesViewController *) navController.rootViewController;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.