почему элементы панели инструментов не отображаются, когда я автоматически перехожу к этому представлению на основе сохраненного состояния?

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

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

Выдержки из кода, чтобы дать общее представление:

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

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

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

  • В нижней части метода viewDidLoad проверьте состояние предыдущего представления.
  • Если необходимо, затем автоматически перейти к представлению 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];

}

Любые идеи? Идеи для поиска неисправностей?


person Greg    schedule 16.04.2011    source источник


Ответы (2)


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

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

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

person Rayfleck    schedule 16.04.2011
comment
Спасибо за наводку, Майк - попробовал - к сожалению, все в порядке (т.е. в моем случае это не проблема) - я получил navigationController 0x553e780 в случае, когда панели инструментов нет - person Greg; 16.04.2011
comment
В вашем втором контроллере просмотра найдите hidesBottomBarWhenPushed и NSLog это значение. Если его там нет, установите его в методе инициализации и попробуйте оба значения. Возможно, по умолчанию установлено неожиданное значение. - person Rayfleck; 16.04.2011
comment
спасибо - к сожалению, это не помогло (если бы это было так, я бы никогда не нашел его) - person Greg; 17.04.2011

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

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

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

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

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

person Greg    schedule 21.04.2011