2012-11-24 23 views
51
的實例管理使用推送塞格斯

所以我正在用5個視圖控制器應用程序,該第一被嵌入在一個UINavigationController和之間的SEGUE前4個視圖控制器工作正常。但是引入第五視圖控制器已經打破了這一點,我得到了錯誤NSGenericException「原因:」只能當源控制器由UINavigationController的

Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.' 

我還沒有這個第五視圖控制器,它只是一個標準的ViewController與圖像視圖和標籤,所有做過什麼不同我的segues通過ctrl拖動故事板中的按鈕來調用。有誰知道這是什麼原因?

謝謝

回答

151

添加導航控制器到你的初始視圖

  1. 選擇初始視圖
  2. 轉到編輯 - >嵌入在 - >導航控制器。
+9

想知道爲什麼這未被選爲正確答案? – dhaval

+9

可能是因爲OP很清楚地表示他已經將所有視圖控制器嵌入到UINavigationController中。我在我的項目中遇到了完全相同的問題。視圖控制器絕對是嵌入在UINavigationController中的,正如導航欄中的 NathanAldenSr

+1

太棒了。簡單的回答,爲我節省了很多時間,並解決了一個障礙。 +1 – voghDev

13

將UINavigationcontroller設置爲StoryBoard中的初始視圖控制器(初始場景)。

4

這是因爲從鈕釦無論你推SEGUE指向一個視圖控制器不是導航視圖控制器視圖控制器繼承是最有可能的。所以,你必須將導航控制器指向segue。

希望這會有所幫助。

1

你只需要嵌入導航控制器到你的源代碼視圖控制器(在一個初始視圖,而不是你所推的觀點)。這可以通過選擇源視圖控制器和轉到編輯器 - >嵌入 - >導航控制器來完成。

如果您認爲導航控制器已完成的導航欄。只需選擇導航控制器,在「顯示屬性檢查器」中禁用顯示導航欄。

0

如果您的應用程序具有導航控制器的根視圖窗口的控制,選擇故事板文件,然後選擇相應的導航控制器,在模擬指標選擇在初始視圖控制器複選框。這對我有效。希望這可以幫助。

0

幾分鐘後,我可以解決它,我面臨同樣的問題。

我已刪除賽格瑞連接,我已經從一個視圖到其他views.That的IT問題解決再次進行連接。 事情是我已經刪除了意見,並且我已經在故事板場景中對視圖進行了少許更改。 重要的是你需要檢查從一個視圖到另一個視圖的連接是否正常工作。

這可能有助於一些一個希望....

0

我都面臨着同樣的問題,我搜索了很多,但沒有什麼能夠幫助我。我嘗試了很多方法。最後我找到了解決方案。 我正在做一個項目在xcode 5和開發視圖使用故事板。 我有3個屏幕,我的連接是..

廠景到視圖2 - >推

視圖2到VIEW3 - >推

視圖2到VIEW1 - >模式(這是我的錯誤,我們需要用推只)

這運行良好,但我已經在view2中放置了bar按鈕項(後退),並且segue連接是模態的。當我點擊view2 bar按鈕時,它被正確地重定向到view1,但是當我嘗試從view1前進到view2時,我得到了同樣的錯誤。 因爲如果你給從源視圖到你需要使用從目標視圖到源視圖相同的推賽格瑞目標視圖推賽格瑞類型..

我希望這將有助於someone..thanks

13

在我在最初的VC執行了這個循環的情況下,導航控制器正在轉換並且已經改變了他可見的VC。

我解決了它這樣做:

if (self.navigationController.visibleViewController == self) { 
    [self performSegueWithIdentifier:@"thankyou" sender:self]; 
} 

沒有更多的崩潰。 :)

+1

它工作..通過nsnotifications觸發segue更有用。 –

+0

很好的答案。通過通知觸發時也幫助我 –

0

我有和你一樣的問題。

我的問題是,我正在調用一個segue的標識符,這個標識符在我正在調用segue的類內不能訪問。我通過直接向ViewController的視圖添加另一個segue來解決這個問題,該視圖可以訪問我正在工作的類。希望這有助於。

0

在我的特殊情況下,調用需要推送的視圖子集的地方僅來自代碼,並且不能通過IB連接。創建視圖子集的原始項目始於一個專用按鈕,因此是IB'able。

沒有可配置的segue,因此任何推送都會導致此錯誤。

我的解決方案很簡單: [self showViewController:targetViewController sender:self];

0

如果你使用UIViewController類

然後檢查一件事賽格瑞標識符的聲明 例如,您已設置

標識符:MySegue1 Segue公司:現模態(選這個,如果你正在使用UIViewController類)

介紹:默認 過渡:

和默認檢查一件事,你的OB主題減速是正確的

也許我的答案是不完全正確的,但這是我所知道的所有抵消此錯誤。希望它能幫助你點點滴滴。

相關問題