Cocoa touch iOS 3-发生内存警告后,UITabBar中的UITABBARIEMS将消失

Cocoa touch iOS 3-发生内存警告后,UITabBar中的UITABBARIEMS将消失,cocoa-touch,ios,uikit,uitabbar,uitabbaritem,Cocoa Touch,Ios,Uikit,Uitabbar,Uitabbaritem,在大量使用旧iOS硬件的用户的请求下,我目前正在重构和优化我的应用程序,以便它能在iOS 3上运行。也就是说,我的UtiAbar出现了一个小故障,我可以在我测试过的所有iPhone 3G手机上复制 iOS 4似乎已经解决了这个问题,但我想知道在那之前,是否还有其他人也有这个问题,并且找到了一个(相对优雅的)解决方法 问题是你可以在下面看到什么;当出现内存警告且屏幕外的所有视图都被释放时,当我将带有选项卡栏的视图控制器带回到屏幕上时,应该在其中的所有UITabbaritem都消失了。就我所见,他们

在大量使用旧iOS硬件的用户的请求下,我目前正在重构和优化我的应用程序,以便它能在iOS 3上运行。也就是说,我的UtiAbar出现了一个小故障,我可以在我测试过的所有iPhone 3G手机上复制

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

问题是你可以在下面看到什么;当出现内存警告且屏幕外的所有视图都被释放时,当我将带有选项卡栏的视图控制器带回到屏幕上时,应该在其中的所有UITabbaritem都消失了。就我所见,他们根本没有被画出来;ie点击标签栏无效。设置断点并检查UITabBar及其在内存中的项之后,它们仍然在那里(即没有被释放),只是在控制器loadView方法中重新创建UITabBar时,它们没有被重新绘制

我的应用程序的工作原理与官方Twitter应用程序类似,因为我实现了自己版本的UITabBarController,因此我可以正确地控制它与父级UINavigationController的集成。尽管如此,我还是尽可能地将其设置为与原始UITabBarController类接近,所有子视图控制器都处理各自的UITABBARIEMS,并在类的init方法中初始化它们。一旦子视图控制器通过访问器方法传递给我的TabController对象,就会访问tabBarItems并将其添加到UITabBar视图中

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

非常感谢


经过一番研究,我想我找到了解决这个问题的办法。这不是我追求的最优雅的解决方案,但它确实有效

我猜在触发内存警告后,Uitabritem对象发生了一些事情,基本上导致它们损坏。我尝试了很多方法(刷新uitabar、重新创建控制器阵列等),但都没有成功

我终于发现,如果你完全摧毁了UITABBARIEMS,并分配了新的UITABBARIEMS,那么这些UITABBARIEMS就会起作用。:)

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


我仍然会留意更好的解决方案(我认为这种方法会有一点开销),但谢天谢地,在这个阶段,iOS 3遗留支持的问题越来越少了

听起来不错!当然,我对你的应用程序更感兴趣,现在我看到了一个屏幕截图链接可用?哈哈谢谢!啊,有一个链接。但不幸的是,我被要求关闭应用程序;()记录在案,这是我最后一次让我的应用程序符合iOS 3标准。像这样奇怪的怪癖让它成为一场疯狂的噩梦…iOS 3?是的,再见。让我们来听听Xcode 4.2、ARC和故事板的故事(mwahaaa.)至于应用程序删除请求,请理解。(旁注:在开始使用某个应用程序之前,我也曾向TPCi咨询过该应用程序,但出于类似原因,我也没有继续使用该应用程序!)