2010-05-04 69 views
0

我做了以下內容:dismissModalViewControllerAnimated:在模擬器崩潰,但不能在電話

[self.parentViewController dismissModalViewControllerAnimated:YES] 

此代碼失敗,使用模擬器,但手機本身上沒有問題的作品。模擬器的控制檯不顯示錯誤。我使用NSLog語句將這一行代碼定位爲罪魁禍首。但是,在手機上運行時,控制檯(窗口>管理器)顯示上述代碼已執行,應用程序繼續前進,沒有任何問題。

在調試器中運行代碼時,以下語句出現在Xcode調試窗口的底部: GDB:數據格式化程序暫時不可用,將在「繼續」之後重新嘗試。 (目前不安全呼叫dlopen。)

然後窗口顯示:加載43672堆棧幀。 (這聽起來壞)

在調試窗口的下面一行出現無數次: [UIView的(層次)_makeSubtreePerformSelector:withObject:withObject:copySublayers:]

沒有得到太多深入到我的代碼,沒有人知道關於或有這種情況的經驗?

感謝

回答

0

我想你在哪裏是關鍵調用這個,但你不說在哪裏這個代碼。

我懷疑解僱你的父VC是導致這個代碼再次執行,試圖再次解僱父母......基本上是一個無限循環。

1

爲什麼你不只是打電話[self dismissModalViewControllerAnimated:YES]。關閉你的模態視圖控制器已經足夠了。

我知道,它不是你的問題的答案,但也許它有助於避免你的問題。

0

感謝您的回覆。

Aleksejs - 我試過你的建議沒有成功。感謝您確保我首先完成了顯而易見的事情。

progrmr - 我認爲你可能是正確的 - 何時何地我駁回模態視圖是關鍵,我會研究如何做到這一點。我可能需要重新設計我如何處理我的觀點。

這是令人沮喪的,因爲問題不會發生在iphone本身上,只發生在模擬器中。而且,我剛剛證實,使用相同的MacBook Pro,當我在家工作時,錯誤不會出現在模擬器中 - 問題只發生在我的辦公室。奇怪,呃?

我會繼續挖掘並報告我的發現。

再次感謝。

+1

@Jon:如果您的問題得到解答您的問題的答案,如果您通過點擊複選標記來接受它,那將會很好。 – progrmr 2010-05-05 03:52:18

0

更新 - 我沒有解決問題,而是通過重構結構來避免它。之前,在applicationDidFinishLaunching:中,我提出了一個Login視圖控制器作爲模態視圖。然後我需要顯示一個EULA視圖控制器,以便用戶可以同意一些合法的東西。我認爲我的問題是我將EULA視圖作爲登錄視圖(也是模態)的模態。我認爲,模式被提交/駁回的順序是問題(正如程序員所懷疑的那樣)。

我如何避免這個問題?我花時間瞭解委派模式。現在,每個模式視圖(Login和EULA)都在應用程序委託類中呈現,並且在模態視圖上執行某些操作時使用委託來回調。

0

如果self實際上沒有modalViewController,則不應該使用self dismissModalViewControllerAnimated。只需創建一個協議,將解除操作從模式視圖控制器委託給父級。當你推動模態視圖控制器時,分配委託,然後當你想解除它時,調用[self.delegate dismissMe],然後在委託(父)上調用[self dismissModalViewControllerAnimated:...]。

0
[[Picker presentingViewController] dismissViewControllerAnimated:YES completion:nil]; 

而不是

[[Picker parentViewControl] dismissModalViewControllerAnimated:YES]; 

[self presentViewController:picker animated:YES completion:nil]; 

而不是

[self presentModalViewController:picker animated:YES]; 
相關問題