0

这是一个令人尴尬的简单问题,但我需要保留一个视图控制器,而我当前的解决方案不是解决方案。

我有一个滑出表格视图菜单,可以让我选择一个新的视图控制器来推到最前面。当我选择一个视图时,它会释放旧的主视图控制器以推送新的主视图控制器。由于我 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 的一些明显原则,但这会带来很多麻烦。如果我没有说清楚,请告诉我。

4

1 回答 1

-1

您想使用viewControllersUINavigationController 类的属性。文档在这里。基本上,您可以在 viewControllers 数组中交换 2 个视图控制器,然后用于setViewControllers:animated:进行转换。

希望这可以帮助!干杯!

于 2013-08-23T19:22:07.457 回答