2014-11-24 90 views
0

因此,在iOS應用程序中,我使用UINavigationController作爲根視圖控制器。然後我推了幾ViewControllers在棧上,讓我們稱他們爲A,B,C和D.UINavigationController不斷顯示彈出視圖

現在,如果我嘗試從棧中彈出d,我有時 *遇到以下問題:調用 後popViewControllerAnimated,最上面的視圖控制器(D)的視圖仍然存在。但是,如果我顯示堆疊,它會正確顯示,即顯示A-B-C並且D不見了。流行的方法似乎只是做它應該的,但是這個觀點並沒有反映出這一點。

我嘗試了各種其他方法,(popToRootViewController,popToViewController),但行爲不會改變(即堆棧打印正確,但D的視圖仍然存在)。我在所有看起來有意義的視圖上都調用了setNeedsDisplay。

彈出D後,我仍然可以推動並刪除其他視圖控制器。堆棧反映了這些變化,視圖沒有。此外,D的觀點仍然具有響應性,即它不會被凍結,並且應用程序在後臺的行爲正確。所有視圖都非常簡單,沒有標籤視圖或類似內容,只是一些標籤和按鈕。

我已經閱讀了許多關於SO和其他地方關於有類似問題的人的帖子,但沒有一個解決方案似乎適合在這裏。有誰知道爲什麼會發生這種情況?

* _我一直無法弄清楚在什麼情況下。我首先想到這是因爲我推D後很快就會彈出D,但它也偶爾會發生在推送和流行之間有更多時間。

+0

你在使用故事板嗎?你有沒有設置任何的細節,或者你是否在推動代碼? – rdelmar 2014-11-24 20:06:45

+0

對不起,應該提到這一點。我用代碼完成所有工作,我不使用故事板。我創建了一個UINavigationController子類的實例,並創建了ViewController子類實例,我將其推送到堆棧並全部以代碼形式彈出。 – doubleYou 2014-11-25 13:22:02

+0

這聽起來像是你正在做的一切正確,所以這將很難弄清楚,特別是如果你不能可靠地重現問題。我從未在任何項目中看到過類似的東西。 – rdelmar 2014-11-25 15:51:32

回答

0

這個問題似乎是一個時機。正如我所提到的,(D型)的推動和彈出操作有時確實發生得很快。增加2500毫秒的延遲解決了這個問題。添加500毫秒沒有(總是)。由於我不能接受,因此我切換到自定義容器視圖控制器,因此沒有花費大量時間來確定最小延遲是多少。

正如旁註:從dispatch_async更改爲dispatch_sync沒有任何影響。延遲似乎是必要的。

感謝大家的幫助。我要關閉這個主題 - 如果有人可以提供更完整的答案,說明爲什麼事情是這樣的,請發佈它,然後我將其標記爲正確的答案。

1

只有理由我能想到這可能發生的地方是如果你不在主線程中這樣做。如果你是在一些網絡通話後做的話,那麼確保你要回到主線程。有時,如果你在後臺線程上進行UI工作,應用程序不會崩潰,而是會像你所看到的那樣行事!

+0

每個推送和彈出(以及所有其他UI相關的東西)都在主線程中完成。我只是檢查是否異步執行可能會導致問題,但事實並非如此。 – doubleYou 2014-11-25 13:41:20

+0

然後我猜你的代碼片段可能會有所幫助! – Puran 2014-11-25 17:46:33

相關問題