2014-05-21 35 views
2

我目前正在對建立根據用戶控制器的堆棧的應用程序。壓入和彈出多個視圖控制器會導致隨機崩潰

基本上,我有一個UIViewController有一個UIButton導致另一個UIView Controller;有一個通向另一個視圖控制器的按鈕等等。視圖控制器被推入,當用戶總是按下按鈕時,我得到一堆多個視圖控制器。只要用戶想要返回到前一個視圖控制器,視圖就會彈出。

一切運作良好(push和pop)。但是,在隨機的情況下,應用程序會崩潰。我注意到它發生在已經推出大量視圖的情況下,並且我懷疑它可能是內存問題。

我的問題是,比推視圖控制器等,有一種替代,這樣我可以避免堆疊視圖?這也可能是因爲崩潰不是因爲堆疊視圖,而是因爲我只是錯過了某些東西?日誌中沒有錯誤,因此我無法瞭解發生了什麼,我也是iOS開發新手。

非常感謝!

編輯1:沒有在日誌中沒有任何錯誤,但在應用程序崩潰,有這樣一條消息:

Thread 1: EXC_BAD_ACCESS(code = 1, address = 0xd000000c) 

編輯2:這是怎麼了推控制器:

CustomController *custom = [self.storyboard instantiateViewControllerWithIdentifier:@"Custom"]; 
[self.navigationController pushViewController:custom animated:YES]; 

而且我這是怎麼彈出它當按下後退按鈕:

[self.navigationController popViewControllerAnimated:YES]; 

編輯3:該計劃使殭屍對象後,我開始多個push和pop後此消息:

嵌套推動畫可以導致損壞的導航欄 整理了在一個意想不到的導航過渡州。導航欄子視圖樹可能會損壞。 對於開始/結束外觀轉換的不平衡呼叫

這些消息是否表示問題實際上是用動畫推動控制器?感謝大家!

編輯4:我會嘗試修改問題,使其更具描述性 這是我的設置:

控制器A顯示對應於不同地方的圖​​標。您可以點擊圖標推控制器B和顯示細節位置A.

控制器B顯示有關位置的信息一,用一個按鈕來表明現在顯示的圖標接近位置A的位置現在控制器A,你可以再次點擊一個圖標,比如位置B,並顯示詳細信息等等。

當用戶按下返回按鈕,它應該顯示前一視圖控制器。這就是我使用push和pop的原因。有沒有更好的方法來處理這個過程。再次感謝!

+0

你使用ARC嗎?你如何推UIViewControllers?我用推,流行,它運作良好。 Tr 我打開'所有異常斷點',它會告訴你哪裏崩潰。 – nmh

+0

是的。我正在使用ARC。我更新了這篇文章,以展示我如何推動和彈出觀點。其實,當我推動和彈出時,我得到了正確的迴應。但是,當我測試應用程序持續推送和流行時,應用程序崩潰。我會在斷點處做你所說的,並且儘快更新。非常感謝您的回答! – ryan13

回答

0

我的猜測是,你把帶有動畫的多個視圖控制器 - 這可能是錯誤的根本原因。如果你把一個以上的,你應該只動畫LAST推視圖控制器,說:

VC1 *vc1 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC1"]; 
[self.navigationController pushViewController:vc1 animated:NO]; 
VC2 *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC2"]; 
[self.navigationController pushViewController:vc1 animated:NO]; 
VC3 *vc3 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC3"]; 
[self.navigationController pushViewController:vc1 animated:YES]; 

但是,我很難想象在多個推動是必要的情況 - 我認爲它總是導致壞UX。

+0

我更新了自己的帖子,解釋了爲什麼會發生多次推送的情況(實際上並不是多次推送發生在同一時間,推送只發生在用戶按下按鈕時,這會顯示另一個按鈕,當按下按鈕時將推動另一個視圖等)。我已經嘗試刪除動畫,但我仍然崩潰。 – ryan13

+0

檢查請問題和答案:http://stackoverflow.com/a/14413252/2392973,你肯定會觸發推送不止一次(你的控制檯日誌說它)。可能你確實在故事板中連接了一個push segue?然後你推入代碼? –

+0

道歉。我剛剛發現我發佈的有關嵌套推送的日誌與我遇到的隨機崩潰無關。 (但是要感謝鏈接,當我解決其他問題時,它會對我有所幫助)。因此,在原始問題中,我不確定崩潰是由於堆疊的控制器造成的,但是當我多次檢查內存時,它會發射400-500MB,這與我典型的35MB相差甚遠。這可能是問題嗎?但是,如果是這樣,我將如何解決嵌套視圖控制器的需求?非常感謝你! – ryan13

0

我的建議是:檢查Zombie Objects是否啓用並使用儀器「Allocations」來查看您的應用程序是否存在內存問題。通過這些工具提供的信息,您可以瞭解應用程序正在發生的情況並對其進行處理。 如果您需要幫助,請告訴我。

祝你好運!

+0

非常感謝!我會盡你所能,儘快更新。 – ryan13

+0

我更新了帖子以包含啓用殭屍對象後得到的日誌。我不太確定他們的意思。謝謝你的時間! – ryan13

0

當按下或彈出時,應關閉動畫。我認爲這會在動畫未完成時導致崩潰。

推送:self.navigationController pushViewController:custom animated:NO];

流行:[self.navigationController popViewControllerAnimated:NO];

+0

我在崩潰發生之前更新了帖子以包含日誌。我會嘗試刪除動畫並查看它是否會刪除錯誤。謝謝! – ryan13

相關問題