我正在研究其主UI基於選項卡欄控制器的應用程序。iOS - 收到推送通知後的顯示視圖
在其中一個選項卡中,我有一個集合視圖,通過導航控制器鑽取到詳細視圖。
我想要做的是收到推送通知後,我想選擇此特定選項卡,從服務器獲取最新數據,找到要顯示的特定項目,然後將詳細視圖推送到屏幕上以顯示所述項目。
我的問題是我得到的CollectionView後以下消息:didSelectItemAtIndexPath:
終止應用程序由於未捕獲的異常「NSGenericException」, 原因:「找不到賽格瑞 導航控制器‘FavouriteItem’。只有當源控制器由UINavigationController的一個實例管理時,才能使用push segues。'
這裏是我到目前爲止做:
應用代表應用程序: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放置在導航控制器(它嵌入在故事板中的一個內)中?
是的,我知道你可以做到這一點,但是我的問題是我做這件事的地方,當然我最初在應用程序委託中響應通知,這是我發送消息給favouritesViewController的地方。 我發送一條消息給selectFavouritesTab(如上所述)來選擇收藏夾選項卡,該選項卡簡單地設置tabBarController的selectedIndex,它是應用程序的根視圖控制器。 FavouritesViewController已經嵌入到故事板中的導航控制器中,故事板連接到標籤欄控制器。 – Nick 2014-10-04 11:40:16
在你的AppDelegate代碼中,你正在創建一個全新的FavouritesViewController,它並沒有嵌入到NavigationController中。因此錯誤。您需要獲取對現有FavouritesViewController的引用,而不是實例化一個新引用。要做到這一點,你可以使用tabBarController的viewControllers屬性。 – pbasdf 2014-10-04 11:44:57
非常感謝你,我的一個小學生的錯誤;-)添加你的最後評論到你的答案,然後我會接受它。 – Nick 2014-10-04 11:57:02