我正在开发一个主要用户界面基于标签栏控制器的应用程序。
在其中一个标签中,我有一个集合视图,可以通过导航控制器向下钻取到详细视图。
我想要做的是收到推送通知后我想选择这个特定的标签,从服务器获取最新数据,找到要显示的特定项目,然后将详细信息视图推到屏幕上显示上述项目。
我的问题是我在collectionView之后收到以下消息:didSelectItemAtIndexPath:
由于未捕获的异常终止应用程序' NSGenericException', 原因:'找不到segue的导航控制器 ' FavouriteItem&#39 ;. Push segues只能在源时使用 controller由UINavigationController实例管理。'
到目前为止我正在做的事情:
App Delegate应用程序: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放置在导航控制器(嵌入故事板中的一个)中? / p>
答案 0 :(得分:1)
您遇到的问题是您没有实例化导航控制器。
通过使用该方法加载收藏夹视图,您实际上只创建一个视图控制器。
因此,当你告诉它推动它时,它不能,因为你没有从故事板中实例化导航控制器。
导航控制器可能已经存在,因此你需要掌握它而不是创建新的控制器。
我现在正在使用手机,所以无法完全回答,但如果您仍在努力,请告诉我,我会看看我是否可以做广告代码。是否需要首先看到更多代码。
答案 1 :(得分:1)
您可以使用以下命令将视图控制器包装在标准导航控制器中:
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:favouritesViewController];
但是我从上面的代码中看不出favouritesViewController是如何在tabBarController中呈现的。如果你在故事板中进行操作,那么只需拖动一个空白的导航控制器,将tabBarController的相关选项卡挂钩到导航控制器(按住Ctrl键拖动,然后选择“关系segue:viewControllers”,然后从导航控制器挂钩到你的FavouritesViewController(同样)。
修改强>
如果已在故事板中完成,那么您需要修改代码以获取现有版本的NHFavouritesViewController
,而不是实例化新的。类似的东西(假设您在self.tabBarController
中引用了标签栏控制器,而favouritesViewController
位于带有索引favouritesTab
的标签中(我假设您可以获得这些,因为您已经拥有选择标签的方法):
UINavigationController *navController = (UINavigationController *)self.tabBarController.viewControllers[favouritesTab];
NHFavouritesViewController *favouritesViewController = (NHFavouritesViewController *) navController.rootViewController;