2010-03-03 3 views
1

Что-то меня озадачивает, после того как я прошел через свое приложение с помощью инструментов, это приложение UINavigationBased, оно это заметило.UINavigationController strategy (iPhone)

Каждый раз, когда клетка Tableview сливают и я делаю это:

 GenericTableViewController *someViewController = [[Generic TableViewController alloc] init];  
     [self.navigationController pushViewController:someViewController animated:YES]; 
     [someViewController release]; 

Я затем нажмите кнопку назад и посмотреть на инструменты, чтобы узнать, сколько живой экземпляры GenericTableViewController существует. Перед обратным краном есть 1, а затем - 0. Это замечательное, хорошее управление чистой памятью с помощью UINavigationController.

Однако, в других местах приложения я не использую кнопку «Назад», чтобы оставить вид, в некоторых случаяхКонтроллеры, нажимая одну из моих пользовательских кнопок, будут запускать код полностью, как указано выше, но viewController, в котором я нажал пользовательская кнопка не будет выпущена.

Полагаю, я понимаю, почему navigationController выносит решение, что я могу что-то подтолкнуть к стеку и что я вернусь позже, чтобы он сохранил контроллер в своей памяти. Это должно означать, что нажатие кнопки «назад» использует [self.navigationController popViewController]. ОК.

Проблема в том, что каждый раз, когда я посещаю представление, которое не осталось с помощью кнопки «назад» в навигационном блоке, он не будет выпущен . Распределение подсчета в Инструментах просто увеличивается каждый раз, когда я посещаю представление, пока у меня не будет 20 объектов.

Я попытался положить [self.navigationController popViewController] в селектор для моих пользовательских кнопок. Это означает, что я вручную выталкиваю видимый viewController, прежде чем нажимать новый на стек. Но счет распределения не падает? угадайте, что кнопка «назад» не использует эту технику в конце концов ...

Я также пробовал использовать popToViewController, так как я всегда знаю, был ли контроллер в стеке или нет. Но для использования popToViewController мне нужно сохранить ссылку для представления.

Есть ли какой-то звуковой способ сказать UINavigationController: если этот viewController находится в вашем стеке, пожалуйста, отобразите его, если нет, создайте его экземпляр, нажмите на стек и покажите его.

Проблема здесь, вероятно, в том, что не все мои навигационные функции в NavigationController полностью линейны. Мне иногда придется перейти из элемента стека нет. 2 для установки позиции №. 5, назад к 3 и т. Д.

Итак, есть ли способ сделать это, в то же время имея UINavigationController, убедившись, что вы выпустили мои viewControllers и не создавали один и тот же viewController несколько раз?

ответ

3

Вы могли бы попытаться получить доступ к UINavigationController «s viewControllers свойства, чтобы получить NSArray всех контроллеры отображения в настоящее время на навигации стеке. Затем используйте containsObject:, чтобы проверить, находится ли контроллер просмотра уже в стеке.
Если это так, используйте popToViewController:animated:, чтобы показать контроллер. Если он не находится в стеке, просто используйте pushViewController:animated:. Если это вам не поможет, возможно, setViewControllers:animated: - правильный метод.

+0

Hi ChrisB Я не думал об использовании массива viewcontrollers для проверки вручную, если мой объект находится в стеке. Правильно выполнив, я должен сделать этот тест как можно меньше. благодаря – RickiG

Смежные вопросы