簡體   English   中英

為什么不執行我的搜尋?

[英]Why isn't my segue being performed?

當有許多事情之一發生時,我會有一個應該發生的事情,所以它被編程地調用,就像這樣:

- (void)unwindAway
{
    NSLog(@"Let's segue");
    [self performSegueWithIdentifier:@"mySegue" sender:self];
    NSLog(@"We should have just performed the segue");
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"Let's do a segue");
}

但是我在控制台中得到的輸出是:

2014-05-29 22:20:30.173 My App[7848:60b] Let's segue
2014-05-29 22:20:30.178 My App[7848:60b] We should have just performed the segue

如您所見,它甚至都沒有調用prepareForSegue。

正確的名稱是正確的-如果我輸入的名稱無效,則會出現您所期望的錯誤。

有任何想法嗎?

對於放松的segue,在視圖控制器上調用prepareForSegue:sender: :,它是segue的源,換句話說就是您要退出的那個。

根據Rob在評論中的建議,我在segue的目標View Controller中檢查了方法的名稱。 它看起來不錯(並且是在IB中選擇的,而不是輸入類型),但是將其粘貼並重新編譯解決了該問題。 情節提要的源代碼中一定有一些混亂,這可能是重命名方法的產物。

值得注意的是,如果有人遇到類似的問題,如果在任何地方都找不到segue的目標方法,則該應用程序將不會產生任何錯誤(我已經通過輸入一個無意義的方法名來確認了這一點)。

我知道您的問題已得到解決,但是為了將來參考,我只想說類似的問題可能是由展開過程的工作方式引起的(例如上面的技術說明鏈接)。

一旦在某個視圖控制器中觸發了segue,就會使用以下消息調用其父(!)視圖控制器: viewControllerForUnwindSegueAction:fromViewController:withSender: 該實現檢查父級是否要處理展開動作。 如果不是,則在帶有子視圖控制器的數組中搜索要處理該動作的視圖控制器。

我的問題是,展開動作是在嵌入在導航控制器中的視圖控制器的子視圖控制器中實現的。 因此,當開始搜索時,導航控制器(父級)被問到:您會處理該操作嗎? 它返回了NO。 然后,它的孩子們被問到一樣。 它返回了NO。 因為該消息未發送到父視圖控制器的子級的子視圖控制器,所以沒有視圖控制器會處理展開操作,並且中止而沒有錯誤消息。

我的解決方案是在視圖控制器本身而不是在其子視圖控制器中實現展開動作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM