iOS5 +プロジェクト(xcode 4.4.1 SDK 5.1)に取り組んでいます
私はユニットテストの中にこのコードを持っています:
[_appDelegate application:nil didFinishLaunchingWithOptions:nil];
UITabBarController *tabBarController = (UITabBarController*)_appDelegate.window.rootViewController;
NSArray *viewControllers = [tabBarController viewControllers];
UINavigationController *nc_1 = [viewControllers objectAtIndex:0];
UIViewController *vc_1 = nc_1.topViewController;
STAssertTrue([vc_1 isKindOfClass:[ScheduleViewController class]]==YES, @"UITabBarController first tab should be a ScheduleViewController class");
テストを実行すると、テストは失敗します。
だから私はデバッガーで確認します:
(lldb) po [ScheduleViewController class]
(id) $1 = 0x00142b04 ScheduleViewController
(lldb) po vc_1
(UIViewController *) $2 = 0x11a32dc0 <ScheduleViewController: 0x11a32dc0>
(lldb) print (BOOL) [vc_1 isKindOfClass:(Class)[ScheduleViewController class]]
(BOOL) $4 = YES
(lldb) po [vc_1 class]
(id) $5 = 0x00142b04 ScheduleViewController
(lldb)
application:didFinishLaunchingWithOptionsで:ScheduleViewControllerを作成し、それをナビゲーションコントローラーのrootControllerとして使用します。デバッガーはそれが正しいと言います。上記のアサーションの何が問題になっているのかわかりません。
誰かがこれについて考えていますか?
アップデート
このassertの最初の実装は次のとおりです。
STAssertTrue([vc_1 isKindOfClass:[ScheduleViewController class]], @"UITabBarController first tab should be a ScheduleViewController class");
アサートも同じように失敗しました。
アップデート2
コメントで示唆されているように、私はアサートの前にこのコードを追加しようとします:
BOOL vcBool = [vc_1 isKindOfClass:[ScheduleViewController class]];
デバッガーを使用すると、次のようになります。
(lldb) print (BOOL) [vc_1 isKindOfClass:(Class)[ScheduleViewController class]]
(BOOL) $1 = YES
(lldb) print (BOOL) vcBool
(BOOL) $2 = NO
(lldb)
アップデート3
コメントで示唆されているように、アサートの前にこの行を追加しました。
NSLog(@"vc_1=%@ class=%@", vc_1, NSStringFromClass([vc_1 class]));
デバッグコンソールから:
vc_1=<ScheduleViewController: 0x993bdb0> class=ScheduleViewController