2014-09-10 49 views
0

我有一個分段控件,我用它在三個視圖控制器之間切換。我的第一個tableview被嵌入到導航控制器中,其中分段控件位於導航控制器中。我還在故事板中有兩個自定義段落(動畫來自左側和右側)。在我的「主」控制器類 - 分段控制的中間 - 我使用此代碼使用故事板段與分段控制

- (IBAction)indexChanged:(id)sender { 
    if ([sender selectedSegmentIndex] == 0) { 
     [self performSegueWithIdentifier:@"leftSegue" sender:self]; 
    } 
    else if ([sender selectedSegmentIndex] == 1){ 
    } 
    else { 
     [self performSegueWithIdentifier:@"rightSegue" sender:self]; 
    } 
} 

這對於這兩個控制器非常適用。當這些視圖控制器放在屏幕上時,我仍然可以在最左側和最右側的控制器之間移動,但是回到主控制器正在嘗試嘗試的每次嘗試都會崩潰。我認爲這與我不瞭解self我發送的performSegueWithIdentifier消息或self,我將傳遞給sender:

示例:如果在else if ([sender selectedSegmentIndex] == 1){}創建新SEGUE,與唯一標識符從兩個新控制器來,應用程序崩潰說「接收器具有帶有標識符的賽格瑞」當它被正確拼寫。在這個例子中,接收者是誰?

編輯:我在這裏添加了當前的故事板圖片。前兩個是自定義賽段,中間兩段是模態和推送,針對需求而定。

編輯2:使用像self.navigationController.viewControllers[0]這樣的方法找到了正確的視圖,但它不允許我切換回初始控制器 - 它重新繪製並丟失導航欄。

回答

1

在Xcode中,在 「斷點導航」 視圖中添加一個 「異常斷點」。 啓動您的應用程序,並嘗試減少崩潰。 Xcode現在應停止在導致崩潰的指令上。 所以,現在當你停下來,嘗試在調試區域鍵入po self,以獲得哪些類是接收器,它可能會幫助你瞭解發生了什麼...

0

從視圖您segue從主視圖控制器您目前使用的控制器可能沒有被正確標記爲「rightSegue」(或其他所謂的)。

在選擇Storyboard segue時,在Xcode的右側面板上,檢查「標識符」字段是否標記正確。

+0

它適當的標籤。錯誤必須來自IBAction內部 - 'self'是我想要顯示的視圖控制器。我是否應該繼續使用popover或類似的方法? – Jared 2014-09-10 16:06:24

+0

我的理解是,你從中間部分開始你的觀點(我們稱之爲VC2)。然後你移動到VC1或VC3。當你通過分段控制回到VC2時,這就是錯誤發生的地方? – Koh 2014-09-10 17:11:51

+0

是的,確切地說。我現在知道錯誤發生了,因爲分段控制操作發生在VC2內 - 這是各種主要視圖。有一種簡單的方法可以適應「自我」。也許我會在兩者之間提出一個清晰的視圖,並使用它進行導航。理想情況下,我想顯示VC2 0.5秒,並立即繼續VC1,如果我在VC3中按VC1。 – Jared 2014-09-10 17:21:27

1

self在Objective-C中相當於this在大多數其他語言(Java,PHP等)中。

這意味着當前的課程。

MainViewController說,如果你這樣做:

[self performSegueWithIdentifier:@"leftSegue" sender:self]; 

這是一樣的

[MainViewController performSegueWithIdentifier:@"leftSegue" sender:self]; 
+0

謝謝。因此,使用這種方法我不認爲有可能再次呈現中間視圖控制器,因爲我不能有一個繼續'自我' - 它需要呈現其他東西? – Jared 2014-09-10 16:31:15

+0

正如在 - 我不認爲有一種方法segueToSelf或將執行類似的方法。 – Jared 2014-09-10 16:34:01

+1

你能詳細說明你想達到的目標嗎?我不明白爲什麼你的viewController需要延續到自己 – meda 2014-09-10 16:34:24