objective-c – isKindOfClass不能按预期工作
发布时间:2020-12-14 20:04:15 所属栏目:百科 来源:网络整理
导读:我正在开发一个iOS5项目( xcode 4.4.1 SDK 5.1) 我在单元测试中有这个代码: [_appDelegate application:nil didFinishLaunchingWithOptions:nil];UITabBarController *tabBarController = (UITabBarController*)_appDelegate.window.rootViewController;NSA
我正在开发一个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) 在应用程序中:didFinishLaunchingWithOptions:我创建一个ScheduleViewController,我将它用作导航控制器的rootController.调试器说它是正确的. 有人对此有所了解吗? 更新 断言的第一个实现是: 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 解决方法
我找到了解决方案.
这是由@vacawama在评论中链接的帖子中提供的解决方案的反转.我也在测试目标中拥有了应用程序目标的所有* .m源代码.当我在寻找isKindOfClass问题的解决方案时,我注意到在测试会话开始时控制台上发出了很多警告.警告是这样的: Class AClass is implemented in both /Application Support/iPhone Simulator/5.0/Applications/7FC68A9C-4F2C-4A30-85AD-87D8ABA7A275/App.app/App and /Developer/Xcode/DerivedData/App-fvbgaqbdupuoodgquxhlwbudpsin/Build/Products/Debug-iphonesimulator/App.octest/AppTests. One of the two will be used. Which one is undefined. 我从测试目标中删除了应用程序的所有.m文件. 现在isKindOfClass按预期工作. 感谢大家的支持. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |