2012-09-24 104 views
4

下面的代碼在iOS 4和5中正常工作,但在iOS 6中使用EXC_BAD_ACCESS崩潰。我很感激任何幫助解決它。這段代碼被稱爲在UITableViewController來處理我的應用程序的搜索邏輯:UINavigationController popViewControllerAnimated:在iOS 6中崩潰

CATransition *transition = [CATransition animation]; 
transition.duration = 0.3f; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
transition.type = kCATransitionFade; 

[self.navigationController.view.layer addAnimation:transition forKey:nil]; 
[self.navigationController popViewControllerAnimated:NO]; 

我添加的方式tableView是類似的,調用時不會崩潰:

SearchTVC *searchTable = [[SearchTVC alloc] init]; 
searchTable.detailViewController = self.detailViewController; 

CATransition *transition = [CATransition animation]; 
transition.duration = 0.3f; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
transition.type = kCATransitionFade; 

[self.navigationController.view.layer addAnimation:transition forKey:nil]; 
[self.navigationController pushViewController:searchTable animated:NO]; 

可能是什麼問題?

* 編輯

有趣的是,如果我使用[self.navigationController popViewControllerAnimated:YES];YES而不是NO)的碰撞沒有發生的。但是,這當然會破壞使用自定義流行動畫的目的。

+0

有關墜機的更多細節將有所幫助;我想起了http://stackoverflow.com/questions/11584607/how-to-prevent-crash-on-cancel-of-mfmailcomposeviewcontroller/11588677#11588677 –

回答

2

我知道我的問題含糊不清,但我沒有其他要離開的東西。我知道行[self.navigationController popViewControllerAnimated:NO];是問題,但我不明白爲什麼。然後我遇到了this question,第一個答案建議我讓我的搜索表成爲一個實例變量,而不是每次我想呈現它時都創建一個新實例,並且實際上它工作正常。這肯定是一個記憶問題,我無法把頭圍繞。

TL;博士

請確定這是被入棧和出棧的UIViewController是一個實例變量。

+0

喜歡TLDR版本。它對我最有意義,更重要的是...工作。 –

7

檢查你是否有這樣一條線某處在您的視圖控制器代碼如下:

self.navigationController.delegate=self; 

如果是這樣,則必須將其設置回

self.navigationController.delegate=nil; 

你說

[self.navigationController popViewControllerAnimated:YES]; 

否則,popViewControllerAnimated將首先釋放委託a然後嘗試調用它 - 導致崩潰。

+0

重置導航控制器的委託似乎需要在'viewWillDisappear:'中發生。在'viewDidDisappear:'中做''有時似乎有效,但並不是所有的時間,'viewWillDisappear:'仍然允許委託來控制任何自定義轉換。 – Ian

+0

非常感謝。這會花費我很長時間才能找到。這是一個非常令人討厭的基於時間炸彈的iOS內部堆棧崩潰。 – BaseZen