2011-01-24 80 views
0

我有2個意見; 查看A - 顯示錶列出 - A列,B,C ...(實際上是從一個分機API請求填寫) 視圖B - 顯示有關所選行iPhone uinavigationcontroller問題

現在我們當我點擊一排的說的詳細點第一次在視圖A上,它將我帶到a的詳細視圖(ie.e視圖B)。之後,我回到查看A.現在,當我點擊任一行a/b,它給了我一個錯誤; 編程接收信號:「EXC_BAD_ACCESS」

每次都不會發生此問題。在某些情況下,我可以多次導航回&。

我的代碼是:

bookdetailViewController = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:[NSBundle mainBundle]]; 

請幫助我。

回答

0

有一個很好的可能性,你不能總是重複它,因爲時機。你說屏幕正在被外部API請求填充。您是否將詳細信息視圖設置爲API請求的委託,以便在API請求完成且數據準備就緒時通知它?

我建議您可以通過從列表視圖快速轉到詳細信息視圖來重現錯誤,但在詳細信息視圖可以加載其數據之前,可以返回到列表視圖。如果詳細信息視圖代表API請求的委託,則應用程序將崩潰,因爲API請求的委託在它能夠調用您指定的任何委託消息之前已被釋放。如果您提供詳細信息查看時間來加載數據,則不會遇到此故障。

我有一個應用程序我工作的一個類似的錯誤,我避免它在同一個黑客位的時刻 - 在詳細視圖的dealloc:

-(void)dealloc 
{ 
    [super dealloc]; 
    self = nil; 
} 

如果任何人有一個更聰明的方法爲了確保釋放的視圖設置爲nil,我歡迎他們的建議。

0

我以前有類似的問題,它通常最終是因爲我發佈了一個對象而沒有保留它。具體來說,你可能想要檢查你的視圖和單元格。

+0

我確實檢查過。我沒有發佈任何正在使用的obj。例如views/cells 事實上,我並沒有在大部分的東西上使用retain/release。 – testndtv 2011-01-24 18:40:07

+0

調試 程序接收信號非常困難:「EXC_BAD_ACCESS」。 ,因爲它沒有給出任何具體的信息 – testndtv 2011-01-24 18:46:31

+0

只需要添加,我也通過一些信息從視圖A來查看B aBook = [appDelegate.books objectAtIndex:indexPath。行]; \t \t bookdetailViewController.aBook = aBook; \t \t [self.navigationController pushViewController:bookdetailViewController animated:YES]; – testndtv 2011-01-24 18:51:41

0

爲了給你最好的答案,有必要看看你的viewDidLoad:,viewWillAppear:和可能的tableView:didSelectRowAtIndexPath:方法有什麼。

這一行:

bookdetailViewController = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:[NSBundle mainBundle]]; 

你初始化(並因此保留)BookDetailViewController的一個實例。當你回來查看A(我認爲是名爲BookListViewController或BooksViewController的東西)時,誰正在處理該版本的發佈。如果沒有人負責釋放它,那麼它可能不會導致EXC_BAD_ACCESS,但它不好。