popToRootViewController не работает с массивом UINavigationControllers - PullRequest
0 голосов
/ 11 ноября 2010

У меня есть UITabBarController с массивом UINavigationControllers (например, приложение iPod), так что я могу переключать вкладки, и на каждой вкладке есть стек контроллеров представления.

Я хочу иметь возможность отображать все представленияконтроллеры возвращаются в корень, если пользователи касаются новой вкладки, поэтому реализовали метод делегата UITabBarController:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
 // Pop all view controllers back to the root view controller
 for (UINavigationController *nc in tabBarController.viewControllers){
  [nc popToRootViewControllerAnimated:NO];
 } 
}

Чтобы проверить, что это работает должным образом, я поставил точку останова на метод dealloc моих различных viewControllers.

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

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

Надеюсь, что это имеет смысл, и любая помощь будет полезна, даже если это просто идеи о том, какдля устранения проблемы.

С уважением

Дейв

PS

Все это связано с тем, что мое приложение проверяло наличие обновлений при запускеиз старой базы данных и использовать новую.С iOS4 и выше мое приложение больше не убивается, поэтому нужно также проверить наличие обновлений в applicationWillEnterForeground, главное отличие в том, что приложение не находится в известном состоянии.

1 Ответ

1 голос
/ 11 ноября 2010

У меня есть обходной путь, хотя я не уверен, почему это работает, поэтому рад принять более полное объяснение.

Я также реализовал другой метод UITabBarController shouldSelectViewController

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
    // Pop all view controllers back to the root view controller
    for (UINavigationController *nc in tabBarController.viewControllers){
        [nc popToRootViewControllerAnimated:YES];
    }
    return YES;
}

Это работает, ПРЕДОСТАВЛЯЕТСЯ, чтобы анимированный флаг был установлен на ДА.

...