1

我第二次嘗試呈現我的視圖控制器時遇到異常,我希望這個列表中的人員可以說明我在做什麼錯...presentViewController:'找不到導航控制器的segue' - 如何處理來自同一個ViewController的2個segges

我的故事板有一個導航控制器加載一個CategoryViewController。在CategoryViewController UI(一個UICollectionViewController)中,segue連接到單元以加載另一個視圖控制器。

當單擊該單元格發生時,performSegue我CategoryViewController被稱爲(到目前爲止好),然後我重新加載相同視圖控制器如下:

//check if item has a second category or not 
if (/*need to reload same controller with different data*/) { 
     //Load list of items for that category 
     //CategoryViewController *v= [segue destinationViewController]; 

     UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
     UINavigationController *vc = [sb instantiateViewControllerWithIdentifier:@"categoryViewID"]; 
     CategoryViewController *cvc = (CategoryViewController*)vc; 
     // do some into on cvc here 

     vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
     [self.navigationController pushViewController:vc animated:YES]; 

    } 

能正常工作。現在,一旦加載並顯示了CategoryViewController的第二個實例,並且單擊一個單元格,再次調用Segue並執行if語句的第二部分,我嘗試加載另一個viewController,執行以下代碼行:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UINavigationController *vc = [sb instantiateViewControllerWithIdentifier:@"categoryViewerID"]; 
CategoryViewerController *cvc = (CategoryViewerController*)vc; 
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self.navigationController presentViewController:vc animated:YES completion:NULL]; 

我的新的viewController被實例化,但在那之後,我得到以下運行時錯誤: 原因:「找不到賽格瑞導航控制器‘showCategoryList’。只有當源控制器由UINavigationController的實例管理時,才能使用推塞網。

任何想法,我可能做錯了什麼?

+0

我能夠在兩者之間做出的唯一區別是,在一個循環中你推動視圖控制器,而在另一個循環中,你正在呈現它..所以嘗試推動視圖控制器的後期部分,你得到的異常! – Harsh

+0

不對不起 - 試過,但得到了同樣的問題。不知何故,我的第一個電話,推動新的視圖控制器必須搞亂層次結構 - 我試圖添加一個新的segue加載故事板中的新控制器視圖,但我得到同樣的問題,然後... – Xavier

回答

0

我終於想出了一種方法來完成這項工作。

有從DTS一個偉大的示例代碼示出了如何使用賽格瑞並且示出了如何設置多個塞格斯從1個視圖控制器: https://developer.apple.com/library/ios/samplecode/UnwindSegue/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013644

第一賽格瑞從CELLID連接到本身(CTRL-點擊從單元ID拖動到場景底部的控制器) - 第二個segue從控制器連接到故事板中的第二個場景。

在我實現shouldPerformSegueWithIdentifier的代碼中,並且當我不想要創建新的「相同控制器」時返回false。

我使用如示例代碼didSelectItemAtIndexPath中所示,通過在控制器中滿足正確的條件時調用performSegueWithIdentifier來觸發第二個segue。

還有一個謎團:導航控制器現在位於我的rootViewController和我的第二個viewController之間。我必須嘗試將其移回原來的位置,以查看是否會更改應用程序的行爲並再次生成運行時錯誤...

相關問題