首页 文章

iOS 3 - UITabBarItems在发生内存警告后从UITabBar中消失

提问于
浏览
0

在使用旧iOS硬件的人们提出的大量请求中,我正在重构和优化我的应用程序,因此它可以在iOS 3上运行 . 据说我的UITabBar有一个小问题,我可以复制所有的iPhone 3G单元我已经测试过了 .

这个小故障似乎已经在iOS 4中修复了,但是我想知道在那之前是否有其他人也有这个故障并且已经找到了一个(相对优雅的)解决方法 .

问题是你可以在下面看到的;当发生内存警告并且屏幕上的所有视图都被释放时,当我带一个带有标签栏的视图控制器回到屏幕上时,应该在其中的所有UITabBarItem都消失了 . 据我所知,他们根本没有被吸引;即点击标签栏无效 . 设置断点并检查内存中的UITabBar及其项目之后,它们仍然存在(即没有被释放),只是在控制器loadView方法中重新创建UITabBar时它们没有重新绘制 .

我的应用程序类似于官方的Twitter应用程序,因为我实现了我自己的UITabBarController版本,所以我可以正确地控制它与父UINavigationController的集成 . 我尽可能地将其设置为原始的UITabBarController类,所有子视图控制器都处理它们各自的UITabBarItem并在类的init方法中初始化它们 . 通过访问器方法将子视图控制器传递给我的TabController对象后,将访问tabBarItems并将其添加到UITabBar视图中 .

有没有人见过这种行为,并知道我可以修复它的方法?我希望有一个非常简单的解决方案,因为它已经在iOS 4中运行,所以我不想太糟糕了 .

非常感谢!

Home Screen after memory warning has occurred

1 回答

  • 0

    经过一番研究,我想我找到了解决方案 . 这不是我追求的最优雅的解决方案,但绝对有效 .

    我猜测在触发内存警告后,UITabBarItem对象发生了某些事情,基本上会使它们损坏 . 我尝试了很多东西(冲掉UITabBar,重新创建控制器阵列等),但没有任何效果 .

    我终于发现,如果你完全销毁UITabBarItems并在它们的位置分配新的,那么那些将会起作用 . :)

    所以我对此的最终解决方案是在我的控制器的viewDidLoad方法中添加一个额外条件,如果检测到的系统是iOS 3,并且已经有一个UITabBarItems数组,它将遍历每个,复制掉所有属性需要,销毁它,分配一个新属性,然后将旧属性复制到新属性 .

    我仍然会留意一个更好的解决方案(我认为这个方法有一些开销),但幸运的是,在这个阶段,iOS 3遗留支持变得越来越少 . :)

相关问题