2012-11-03 48 views
0

我有一個基於tableview的導航控制器。根視圖控制器有一個+按鈕,用於添加一個新項目。這會導致視圖控制器的推送過程,允許用戶輸入新項目的數據。不能從unwind segue動作彈出

在此視圖控制器上,左上方的導航欄項是標有「返回」按鈕的標準。我已經將「保存」[bar]按鈕[item]作爲右上方的導航欄項目。

我創建了一個展開IBAction推視圖控制器。

然後,我控制 - 從保存按鈕拖動到視圖控制器上的出口,並將其連接到展開IBAction。

當我點擊保存按鈕時,這個展開動作就會被調用。

但是,我在展開動作中沒有任何操作會彈出視圖控制器。這裏是一個小代碼:

- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender  { 

    return YES; 
} 

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 

    NSLog(@"Should seque from %@", identifier); 
    return YES; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

} 

- (IBAction)unwindFromGoalEdit:(UIStoryboardSegue *)segue { 

    NSLog(@"UNWINDING!!"); 

    [self.navigationController popToViewController:segue.destinationViewController animated:YES]; 
} 

在下面的展開動作中,我試圖用各種方法彈出視圖控制器。但沒有任何反應。沒有運行時錯誤,沒有。但是我看到NSLog(),所以我知道它被調用。

想法?

回答

0

哪一類是unwindFromGoalEdit:?它看起來像你可能已經將它添加到「新項目」視圖控制器...此方法應放置在根視圖控制器中,並且不需要調用popToViewController。這裏有一個空方法就足夠了。

0

問題可能是您有一個保留週期。展開後自動彈出其上方的每個視圖,除非它不能。你不會放鬆自己。所以,添加一個日誌到你期望在dealloc方法中彈出的視圖控制器,或者一個斷點。如果沒有觸發,那麼你知道視圖控制器沒有被彈出。這幾乎肯定意味着你有一個保留週期。看看你的代表或你正在將自己(父母)傳遞到任何地方的任何地方。頂視圖控制器不應該有一個強有力的參考它的父母。實際上,由於這個原因,任何孩子都不應該強烈地提到父母。如果這樣做,放鬆將無法正常工作。