我正在开发一个主UI基于选项卡栏控制器的应用程序。
在其中一个标签中,我有一个收集视图,可通过导航控制器向下钻取到详细视图。
我想做的是在收到推送通知后,我想选择此特定选项卡,从服务器获取最新数据,找到要显示的特定项目,然后将详细信息视图推送到屏幕上以显示该项目。
我的问题是我在collectionView:didSelectItemAtIndexPath之后收到以下消息:
由于未捕获的异常“NSGenericException”而终止应用程序,
原因:“找不到用于segue的导航控制器
“收藏夹项目”。仅当源
控制器由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
的现有版本,而不是实例化新版本。像这样(假设您在self.tabBarController
中引用了标签栏控制器,并且favouritesViewController
在索引为favouritesTab
的标签中(由于您已经有了选择标签的方法,因此我想可以得到这些标签):UINavigationController *navController = (UINavigationController *)self.tabBarController.viewControllers[favouritesTab];
NHFavouritesViewController *favouritesViewController = (NHFavouritesViewController *) navController.rootViewController;
关于ios - iOS-收到推送通知后显示 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26191685/