iOS 3 - UITabBarItems исчезают из UITabBar после появления предупреждения о памяти - PullRequest
0 голосов
/ 24 мая 2011

При большом количестве запросов от людей, использующих устаревшее аппаратное обеспечение iOS, в настоящее время я выполняю рефакторинг и оптимизирую свое приложение, чтобы оно работало на iOS 3. При этом у меня возникли проблемы с моим UITabBar, на который я могу реплицировать все устройства iPhone 3G, на которых я тестировал.

Похоже, что глюк был исправлен в iOS 4, но мне было интересно, если до этого времени кто-нибудь еще имел этот глюк и нашел (относительно элегантный) обходной путь для него.

Проблема в том, что вы видите ниже; когда появляется предупреждение о памяти и все представления за пределами экрана освобождаются, когда я возвращаю контроллер представления с панелью вкладок обратно на экран, все UITabBarItems, которые должны быть в нем, исчезают. Насколько я вижу, они вообще не нарисованы; то есть нажатие на панель вкладок не имеет никакого эффекта. После установки точек останова и изучения UITabBar и его элементов в памяти они все еще там (т.е. не освобождаются), просто они не перерисовываются, когда UITabBar заново создается в методе loadView контроллера.

Мое приложение работает аналогично официальному приложению Twitter, в котором я реализовал свою собственную версию UITabBarController, чтобы я мог правильно контролировать интеграцию его с родительским UINavigationController. Я установил его как можно ближе к исходному классу UITabBarController, хотя все дочерние контроллеры представления обрабатывают свои собственные соответствующие UITabBarItems и инициализируют их внутри методов init класса. Как только дочерние контроллеры представления передаются моему объекту TabController через метод доступа, к tabBarItems осуществляется доступ и добавление в представление UITabBar.

Кто-нибудь видел такое поведение раньше и знает, как я могу это исправить? Я надеюсь, что есть действительно простое исправление для этого, так как оно уже работает в iOS 4, так что я не хочу, чтобы его взломали слишком сильно.

Большое спасибо!

Home Screen after memory warning has occurred

1 Ответ

0 голосов
/ 09 июня 2011

После небольшого исследования я думаю, что нашел решение для этого. Это не самое элегантное решение, которое я выбрал, но оно определенно работает.

Я предполагаю, что после срабатывания предупреждения о памяти что-то происходит с объектами UITabBarItem, что в основном делает их поврежденными. Я много чего перепробовал (очистка UITabBar, пересоздание массива контроллеров и т. Д.), Но ничего не получалось.

Наконец-то я обнаружил, что если вы полностью уничтожите элементы UITabBarItems и разместите на их месте новые, то эти будут работать. :)

Таким образом, мое окончательное решение было добавить дополнительное условие в метод viewDidLoad моего контроллера, чтобы, если обнаруженная система была iOS 3, и уже был массив UITabBarItems, он проходил бы через каждый из них, копировал все необходимых свойств, уничтожьте его, выделите новое, а затем скопируйте старые свойства в новое.

Я все еще буду следить за лучшим решением (я думаю, что в этом методе есть некоторые накладные расходы), но, к счастью, на этом этапе поддержка устаревшей iOS 3 становится все менее и менее проблемной. :)

...