почему элементы панели инструментов не отображаются, когда я автоматически перехожу на это представление в зависимости от сохраненного состояния? - PullRequest
0 голосов
/ 16 апреля 2011

Я пытаюсь понять, почему при автоматическом переходе ко 2-му виду (с использованием UINavigationController) после запуска и просмотра сохраненного состояния элементы панели инструментов не отображаются?

Когда я возвращаюсь на главную страницу (через стандартные схемы UINavigationController), а затем выбираю строку в UITableView и возвращаюсь в то же представление снова, элементы панели инструментов выглядят нормально.

Кодовые выдержки, чтобы дать грубую идею:

mainController - запись на основе обычного выбора

  • через "didSelectRowAtIndexPath"
  • создать новый контроллер вида и поместить (pushViewController) в стек

mainController - после перезапуска и проверки, был ли предыдущий пользователь состояния в представлении 2-го уровня

  • В нижней части метода viewDidLoad проверьте состояние для предыдущего представления
  • Если затем необходимо автоматически перейти к представлению 2-го уровня, следуя тому же методу, что и при обычном подходе выбора выше - на самом деле я реорганизовал код для обоих, чтобы использовать один и тот же метод / код для этого

Вид 2-го слоя

  • в ViewDidLoad установить панель инструментов - код для этого метода

Код:

- (void)setupToolbar {
    [self.navigationController setToolbarHidden:NO];
    UIBarButtonItem *increaseFontButton = [[UIBarButtonItem alloc] 
                                           initWithImage:[UIImage imageNamed:@"icon_zoom_in.png"] 
                                           style:UIBarButtonItemStylePlain 
                                           target:self 
                                           action:@selector(pressButtonIncreaseFont:)
                                           ];
    UIBarButtonItem *decreaseFontButton = [[UIBarButtonItem alloc] 
                                           initWithImage:[UIImage imageNamed:@"icon_zoom_out.png"] 
                                           style:UIBarButtonItemStylePlain 
                                           target:self 
                                           action:@selector(pressButtonDecreaseFont:)
                                           ];
    NSArray *items = [NSArray arrayWithObjects: increaseFontButton, decreaseFontButton, nil];
    self.toolbarItems = items;

    //release buttons
    [increaseFontButton release];
    [decreaseFontButton release];

}

Есть идеи? Идеи для поиска неисправностей?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

Я разработал, как это исправить с помощью процесса исключения, но я не понимаю, почему :)

Итак, что же исправило, так это изменение следующей строки в методе didFinishLaunchingWithOptions делегата приложения:

  // OLD Entry - Did not work
  //[self.window addSubview:navigationController.view];

  // NEW Entry - Fixed it
  self.window.rootViewController = self.navigationController;

Есть идеи почему?

0 голосов
/ 16 апреля 2011

Одна особенность Objective-C, которую я нахожу очень раздражающей и подверженной ошибкам, - тихая ошибка вызова метода для нулевого объекта. После первой строки в методе setupToolBar проверьте, имеет ли NavigationController значение NULL:

  NSLog(@" navigationController is 0x%x", self.navigationController);

Создан ли navController таким же образом для случая перезапуска, как и в обычном случае?

...