2012-12-24 44 views
0

我有一個非常搞砸的視圖系統正在進行。我經歷了幾個模態視圖,然後想要跳回原始視圖(循環回到本身)。唯一的問題是,它會不斷分配新視圖,直到內存不足和應用程序崩潰。我如何告訴我的應用程序,我從來沒有回到預覽視圖控制器,它應該釋放內存塊?我想要做這樣的事情: self.presentingViewController = nil; 但它是隻讀的,我對它的看法越多,就不能像那樣工作。 這是我的故事板。 enter image description hereios模式到以前的視圖控制器正在創建內存問題

+1

你是什麼意思「想跳回原始視圖(循環回自己)」?爲什麼在原始視圖上放棄模態視圖不起作用? – sergio

+0

因此,我從「根表視圖」開始,然後對「朋友選取器控制器」下方的導航控制器執行模態操作。然後從「placehold」文本的角度來看,我模式化爲遊戲控制器。然後我想模態回到左邊的navcontroller/root表格視圖,然後再做一遍。這就像我一直在推動堆疊中的東西,永遠不會清除它。 –

回答

1

這是不完全清楚自己在做什麼,以及爲什麼它像您期望的不工作,但我認爲,以下方法應該爲你工作:

  1. 我開始在「根表視圖」,然後我做了模態

  2. *然後從該視圖‘PLACEHOLD’文本我模態的遊戲控制器

  3. 然後我想模態回到navcontroller/root表視圖。

我假設你正在做的1和2使用– presentViewController:animated:completion:(或者現在已經過時– presentModalViewController:animated:)。

爲了做到3,你必須調用:

[self.presentingController dismissViewControllerAnimated:ZZZ completion:nil];

這將關閉所有從根表視圖模式視圖控制器到你的駁回之一。

如果你已經這樣做了,而且它不能按你的要求工作,我想這可能是因爲你正在關閉模態視圖控制器並在同一個運行循環中呈現一個新的視圖控制器。爲了解決這個問題,只需在您的根控制器定義一個方法,說:

- (void)presentFirstViewController { 
     [self presentViewController:xxxxx animated:YES completion:nil]; 
    } 

後您關閉模態控制器做:

self.presenting.Controller dismissViewControllerAnimated:YES completion:nil]; 

,並提交新的做:

[rootController performSelector:@selector(presentFirstViewController) withObject:nil afterDelay:0.0]; 

這最後一步將提供一些時間讓運行循環在解僱時清理事情,並相繼呈現模態控制器。

Hoper這有助於。

+0

塞爾吉奧,這就是我最終做的,它很好,我不必運行performSelector技巧。但是遊戲控制器沒有從內存中釋放,我找不到原因。當我運行儀器/泄漏並經過「遊戲控制器」幾次時,我可以看到舊的遊戲控制器永遠不會從內存中清除。我能以某種方式迫使他們在完成塊中釋放嗎? –

+0

你可以嘗試在完成塊中爲它們分配nil,儘管我也會在第一個地方尋找它們被過度保留的位置。根據它們被過度保留的原因,在完成塊中刪除它們可能沒有問題,或者您可能會找到更好的解決方案。 – sergio

+0

因爲它是隻讀的,所以你不能將其刪除。 –

相關問題