Эта проблема звучит довольно просто, но я не понимаю, что я пропускаю.Нажатие нового VC в navigationController, кажется, не имеет эффекта
Я пытаюсь вставить новый контроллер вида в контроллер навигации, однако topViewController остается незатронутым.
#import "TNPViewController.h"
@interface TNCViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@implementation TNCViewController
-(void)userDidSelectNewsNotification:(NSNotification*)note
{
TNPViewController *nextViewController = [[TNPViewController alloc] init];
[[self navigationController] pushViewController:nextViewController animated:YES];
UIViewController *test = [[self navigationController] topViewController];
}
В тесте показан экземпляр TNCViewController вместо TNPViewController. Как это возможно?
UPDATE
Спасибо за участие каждого. Имя метода, указывающее уведомления, является красной селедкой. Я нашел проблему, как ранее упоминал Стюарт, но позже удалил. (Поскольку у меня высокий рейтинг репутации, я все еще могу видеть его удаленное сообщение).
Моя первая испытательная установка была такова:
-(void)testSelectingNewsPushesNewViewController
{
[viewController userDidSelectNewsNotification:nil];
UIViewController *currentTopVC = navController.topViewController;
XCTAssertFalse([currentTopVC isEqual:viewController], @"New viewcontroller should be pushed onto the stack.");
XCTAssertTrue([currentTopVC isKindOfClass:[TNPViewController class]], @"New vc should be a TNPViewController");
}
И это не удалось. Затем я установил точку останова и попробовал экземпляр test
выше, и он все еще показывал неправильный контроллер topview.
По крайней мере, тест блок работает, если я изменю
[[self navigationController] pushViewController:nextViewController animated:YES];
в
[[self navigationController] pushViewController:nextViewController animated:NO];
Лучшим решением является использование постоянной анимированный для модульных тестов для отключения анимации.
Пульт управления занимает некоторое время. Он не закончен, когда вы пытаетесь прочитать верхний контроллер. – oxigen
Не было бы разумнее просто добавить следующий контроллер вида на раскадровку и передать его через segues? Затем соответствующим образом измените содержание? Вместо инициализации каждый раз, когда новый TNPViewController ... – Joze
проверяет этот '[self navigationController] .title = @" Some Title ";' Если это не работает, это должно доказать, что ваш пользовательский интерфейс имеет фактически какую-то другую навигацию VC, которая не равна '[self navigationController]' –