這個問題聽起來很基本,但我不明白我忽略了什麼。將一個新的VC推入導航控制器似乎沒有效果
我試圖將新的視圖控制器推入導航控制器,但是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
實例,它仍然顯示錯誤的topviewcontroller。
至少如果我改變
[[self navigationController] pushViewController:nextViewController animated:YES];
到
[[self navigationController] pushViewController:nextViewController animated:NO];
更好的解決方案是使用一個動畫常數單元測試禁用動畫單元測試工作。
推控制器需要一些時間。當你試圖閱讀頂級控制器時,它還沒有完成 – oxigen 2015-04-01 08:07:53
簡單地將下一個視圖控制器添加到故事板並將其傳遞給segger會不會更明智?然後相應地更改內容?而不是初始化每一個新的TNPViewController ... – Joze 2015-04-01 08:08:55
檢查這個'[self navigationController] .title = @「Some Title」;'如果這不起作用,它應該證明你的用戶界面實際上有一些其他導航VC不等於'[self navigationController]' – 2015-04-01 08:25:43