iOS 3-发生内存警告后,UITabBarItems从UITabBar消失。

|| 应使用旧版iOS硬件的人们的大量要求,我目前正在重构和优化我的应用程序,使其可以在iOS 3上运行。也就是说,我的UITabBar有一个小故障,可以在所有设备上复制我已经对其进行测试的iPhone 3G单元中。 该故障似乎已在iOS 4中修复,但我想知道在那之前,是否还有其他人也遇到了该故障并找到了(相对优雅的)解决方法。 问题是您在下面看到的内容;当发生内存警告并且释放了所有不在屏幕上的视图时,当我将带有选项卡栏的视图控制器重新显示在屏幕上时,应该放在其中的所有UITabBarItems都消失了。据我所知,它们根本没有被绘制。即,点击选项卡栏无效。设置断点并检查内存中的UITabBar及其项之后,它们仍然存在(即未释放),只是当在控制器loadView方法中重新创建UITabBar时它们没有被重绘。 我的应用程序与官方Twitter应用程序的工作方式相似,因为我实现了自己的UITabBarController版本,因此我可以正确地将其与父UINavigationController集成。但是,我将其设置为与原始UITabBarController类尽可能接近,所有子视图控制器都处理各自的UITabBarItems并将其初始化在类的init方法中。通过访问器方法将子视图控制器传递给我的TabController对象后,将访问tabBarItems并将其添加到UITabBar视图。 有没有人以前见过这种行为,并且知道我可以解决该问题的方法?我希望对此有一个非常简单的修复程序,因为它已在iOS 4中运行,所以我不想过分地破解它。 非常感谢!     
已邀请:
经过一些研究,我认为我找到了解决方案。这不是我所追求的最优雅的解决方案,但绝对可以。 我猜想在触发内存警告后,UITabBarItem对象发生了一些事情,这些问题基本上使它们损坏了。我尝试了很多事情(刷新UITabBar,重新创建控制器数组等),但是没有任何效果。 我终于发现,如果您完全销毁UITabBarItems并在其位置分配新的东西,那么这些东西将起作用。 :) 因此,我对此的最终解决方案是在控制器的viewDidLoad方法中添加一个额外条件,即如果检测到的系统是iOS 3,并且已经存在UITabBarItems数组,它将遍历每个数组,并复制所有属性需要,销毁它,分配一个新属性,然后将旧属性复制到新属性中。 我仍将继续关注更好的解决方案(我认为此方法会产生一些开销),但值得庆幸的是,在此阶段,iOS 3旧版支持已不再是一个问题。 :)     

要回复问题请先登录注册