iOS - 收到推送通知后的显示视图

时间:2014-10-04 10:01:29

标签: ios uinavigationcontroller push-notification apple-push-notifications

我正在开发一个主要用户界面基于标签栏控制器的应用程序。

在其中一个标签中,我有一个集合视图,可以通过导航控制器向下钻取到详细视图。

我想要做的是收到推送通知后我想选择这个特定的标签,从服务器获取最新数据,找到要显示的特定项目,然后将详细信息视图推到屏幕上显示上述项目。

我的问题是我在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>

2 个答案:

答案 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;