iPhone dev - 标签栏视图控制器的缓存值

问题描述:

我有一个UITabControlController子类,它有一个UITabBar(我没有使用UITabBarController)和5个视图控制器的标签栏项。每个视图控制器都有一个UIPickerView。一次只有一个视图控制器被实例化 - 当一个标签栏项被选中时,当前的一个被删除,新的实例化并添加,旧的被解除分配(self.oldvc = nil;)。因此,如果用户转到第一个选项卡中选取器的第三行,然后切换到第二个选项卡,然后返回,我希望再次选择选取器的第三行。目前,我有它,所以视图控制器实例化与initWithSelectedRowOfFirstComponent:(NSInteger)firstRow secondComponent:(NSInteger)..等等,然后在我的根视图控制器,(带有标签栏的oner),我有一个伊娃缓存每个值..但我不确定..有没有更好的方法来做到这一点?也许是一个plist文件或字典什么的..我不知道,你认为最好的方式来做到这一点是什么?谢谢!!iPhone dev - 标签栏视图控制器的缓存值

我决定使用UITabBarController,让内存警告释放并使用一个叫做“Model”的类,它是一个单例(使用this macro)来保存视图因内存警告而卸载时要使用的数据。

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

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

根据您的意见更多的想法...

我想你可以尝试以下方法:而不是创建,每当按下标签按钮摧毁你的UIPickerView对象,持有的对象。在拥有所有视图的主控制器中有一个“NSMutableArray * viewArray”。我假设你的根UIViewController是UITabBar的委托。当您收到tabBar:didSelectItem:消息时,将隐藏当前视图并显示与所选项目相对应的视图。只需遍历整个数组,并根据是否与所选标签栏项目相对应来隐藏/取消隐藏该项目。

基本上这有点像开始实现你自己的版本的UITabBarController,所以也许你应该考虑使用它。

+0

视图控制器不是在一个arrray,但无论如何,你能解释一下我怎么能做到这一点?这听起来像个好主意,但我不确定如何去做。 – mk12 2009-08-17 19:18:35

+0

所以我应该创建一个新类,只是一个普通的NSObject子类,它包含控制器的状态,并且在我的根控制器中有一个这样的实例? – mk12 2009-08-17 20:57:51

+0

..但是uipickers并不都具有相同数量的组件,其中一个是日期选择器,那么为什么一个类可以用于所有这些类? – mk12 2009-08-17 22:13:13

也许你可以保持您采摘的阵列,您的viewController和刚刚创建的一次重新分配之前,您更新参考选择器,并重新实例时您从阵列设置的选择器,而不是做一个新的。