Пустая страница rootviewcontroller добавлена ​​по умолчанию из iOS 4.3 и выше - PullRequest
0 голосов
/ 20 октября 2011

У меня есть приложение, в котором я использую контроллер навигации для представления иерархических данных с помощью customViewControllers.Однако в нашей спецификации приложения на каждой странице должна быть «домашняя кнопка», которая должна вернуть пользователя на страницу rootviewcontroller.Чтобы добиться этого, у меня есть метод launchHomePage, определенный во всех пользовательских контроллерах представления, который выглядит следующим образом:

- (void) launchHomePage {
    [self.navigationController popToRootViewControllerAnimated:NO];
}

Это прекрасно работало на iOS 4.2.Однако в iOS4.3 и iOS5 при нажатии кнопки «Домой» отображается пустой вид таблицы.Чтобы отладить проблему, я попытался увидеть список viewControllers в navigationController перед вызовом popToRootViewControllerAnimated.

- (void) launchHomePage {

    if(self.navigationController) {

        [self printViewControllers:[self.navigationController viewControllers]];

        [viewController.navigationController popToRootViewControllerAnimated:NO];

    } else {
        NSLog(@"Couldn't retrieve navigationcontroller\n");
    }
}

- (void) printViewControllers:(NSArray *) viewControllers {

    if(viewControllers) {
        NSLog(@"Number of viewcontrollers in navigationController's array is %d\n", 
              [viewControllers count]);

        int i = 1;
        for(UIViewController *viewController in viewControllers) {
            NSLog(@"viewController %d is %@ and has title %@\n", i++, viewController, [viewController title]);
        }
    }
}

Для той же последовательности выполнения ниже приведен вывод описанного выше метода в iOS5.0 против iOS4.2:

iOS5:

Number of viewcontrollers in navigationController's array is 3
viewController 1 is <RootViewController: 0x86259c0> and has title (null)
viewController 2 is <RootViewController: 0x9115680> and has title MainPage
viewController 3 is <FirstPageViewController: 0x9141bd0> and has title FirstPage


iOS4.2:
Number of viewcontrollers in navigationController's array is 2
viewController 1 is <RootViewController: 0x624d520> and has title MainPage
viewController 2 is <FirstPageViewController: 0x651ce10> and has title FirstPage

Я не могу понять, как / почему пустая страница (с нулевым заголовком) в качестве корня контроллера навигации.Цени любую помощь в выяснении этого.

1 Ответ

1 голос
/ 29 ноября 2011

У меня была такая же проблема, и я думаю, что она связана с использованием файла xib для загрузки UINavigationController, но я не смог подтвердить.В любом случае, у меня изначально было это (navcontroller - это UINavigationController, который загружается из файла xib, поэтому я не выделил его, так как думал, что это сделал файл xib):

[navController initWithRootViewController:rootController];

Я заменил егос этим

navController = [[UINavigationController alloc] initWithRootViewController:rootController];

и методом popToRootViewController теперь он работает так же, как и прежде, до iOS 4.3 и iOS 5. Я также протестировал его на iOS 3.1.3 и он работает как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...