Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone开发人员-缓存选项卡栏视图控制器的值_Iphone_Caching_Uiviewcontroller_Uitabbar - Fatal编程技术网

iPhone开发人员-缓存选项卡栏视图控制器的值

iPhone开发人员-缓存选项卡栏视图控制器的值,iphone,caching,uiviewcontroller,uitabbar,Iphone,Caching,Uiviewcontroller,Uitabbar,我有一个根UIViewController子类,它有一个UIAbbar(我没有使用UIAbbarController)和5个视图控制器的5个选项卡栏项。每个视图控制器都有一个UIPickerView。一次只能实例化一个视图控制器——选择选项卡栏项时,将删除当前的视图控制器,实例化并添加新的视图控制器,并取消分配旧的视图控制器(self.oldvc=nil;)。因此,如果用户转到第一个选项卡中选择器的第三行,然后切换到第二个选项卡,然后返回,我希望再次选择选择器的第三行。目前,我有它,因此视图控制

我有一个根UIViewController子类,它有一个UIAbbar(我没有使用UIAbbarController)和5个视图控制器的5个选项卡栏项。每个视图控制器都有一个UIPickerView。一次只能实例化一个视图控制器——选择选项卡栏项时,将删除当前的视图控制器,实例化并添加新的视图控制器,并取消分配旧的视图控制器(self.oldvc=nil;)。因此,如果用户转到第一个选项卡中选择器的第三行,然后切换到第二个选项卡,然后返回,我希望再次选择选择器的第三行。目前,我有它,因此视图控制器是用initWithSelectedRowOfFirstComponent:(NSInteger)第一行第二行组件:(NSInteger)实例化的。。等等,然后在我的根视图控制器(带有选项卡栏的oner)中,我有一个ivar来缓存每个值。。但我不确定。。有更好的方法吗?也许是一个plist文件或是一本字典之类的。。我不知道,你认为最好的办法是什么?谢谢


我决定使用UITabBarController,让内存警告解除分配,并使用一个名为“Model”的类来保存数据,以便在由于内存警告而卸载视图时使用。

也许您可以在viewController中保留一个选择器数组,只需在解除分配之前创建一次,更新对选取器的引用,并在重新实例化过程中从数组中设置选取器,而不是创建新的选取器。

如果不想将五个视图控制器全部分配(在一个数组中),可以将视图的状态分离到一个新类中。然后,您将保留该类的5个实例,并编写一个函数,该函数可以从新类的实例初始化UIPickerViews

每当用户选择不同的选项卡时,都会将对相应状态对象的引用传递给设置视图的函数。此外,通过视图对状态所做的所有更改都应直接应用于模型对象。根UIViewController充当主控制器。另见:

基于您的评论的其他想法

我认为您可以尝试以下方法:不要在按下tab按钮时创建和销毁UIPickerView对象,而是保持对象不变。在主控制器中有一个“NSMutableArray*viewArray”,用于保存所有视图。我假设您的根UIViewController是UITabBar的代理。收到选项卡栏:didSelectItem:消息时,隐藏当前视图并显示与所选项目对应的视图。只需迭代整个数组,并根据项目是否对应于选定的选项卡栏项目来隐藏/取消隐藏该项目


基本上,这有点像开始执行自己的UITabBar控制器版本,所以也许你应该考虑使用它。

视图控制器不在一个ARRY中,但无论如何,你能解释一下我怎样才能做到这一点吗?这听起来是个好主意,但我真的不知道怎么做。所以我应该创建一个新类,只是一个普通的NSObject子类,它包含控制器的状态,并且在我的根控制器中有一个实例?。。但是UIPicker并不都有相同数量的组件,其中一个是日期选择器,那么一个类怎么能用于所有组件呢?但是制作我自己的UIViewController的全部目的是通过一次只分配一个组件来提高内存效率。你确定你没有过早地优化吗?您可能会为了不必要的优化而牺牲简单性。