簡體   English   中英

從堆棧中彈出視圖控制器后,如何將其保留在內存中?

[英]How can I keep a view controller in memory after its popped from the stack?

這是一個令人尷尬的簡單問題,但是我需要保留一個視圖控制器,而我當前的解決方案不是解決方案。

我有一個滑出式表格視圖菜單,可讓我選擇一個新的視圖控制器以推動其發展。 當我選擇一個視圖時,它將取消分配舊的主視圖控制器以推送新的視圖控制器。 由於我90%的功能都圍繞一個視圖控制器進行,因此我希望它保留在內存中,因此我不必經常花費資源來分配它,也不必從核心數據中提取最后一個數據源或發出網絡請求。

我天真地嘗試設置一個占位符temporaryMainViewController並在將其分配給另一個VC之前將其分配給我的中心視圖控制器,但是將當前的主視圖控制器分配給temporaryMainViewController只是簡單地分配了主視圖控制器的地址,因此在更改時,它也是我的tempVC。 嘗試copy視圖控制器會導致崩潰。

所以我該如何有效地做self.temporaryMainViewController = self.currentCenterViewController; 溫度控制器在哪里分配對象的值而不是地址的值?

-編輯-更多信息:

ECSlidingViewController (在我的情況下)在內存中保留3個控制器-頂部/中央/主視圖控制器,左側隱藏的控制器和右側隱藏的控制器。 我的左隱藏控制器是一個表視圖LeftMenuTableViewController ,其中的每一行在被選中時都會觀察與該indexPath關聯的視圖控制器類,然后實例化該類的實例,並通過簡單的賦值語句將其設置為topViewController。 當新的視圖控制器分配給頂視圖時,我只想在內存中保留我的初始頂視圖控制器(屬於PlacesNavigationViewController類(包含PlacesTableViewController ))。

我的第一種方法是在LeftMenuTableViewController聲明一個占位符屬性,因為它永遠不會離開內存本身。

@property (nonatomic, strong) UIViewController* temporaryViewController;

然后在didSelectRowAtIndexPath

// make local variables for storyboard and the identifier of the view controller that will be pushed, then..
self.temporaryViewController = self.topViewController;
self.topViewController = [storyboard instantiateViewControllerWithIdentifier:newViewControllerIdentifier];

但這失敗了,因為為臨時控制器分配了topViewController的內存地址,該地址在下一行被賦予了新的視圖控制器來保存。

因此,我需要一種方法來保存topViewController的內容,以便當topViewController更改時,我的內存中仍舊有VC。

我可能忘記了Objective-C的一些明顯原則,但這帶來了很多麻煩。 讓我知道是否不清楚。

您要使用UINavigationController類的viewControllers屬性。 文檔在這里 基本上,您可以只在viewControllers數組中交換2個視圖控制器,然后使用setViewControllers:animated:進行過渡。

希望這可以幫助! 干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM