我在单元测试中有这个代码:
[_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) = 0x00142b04 ScheduleVIEwController(lldb) po vc_1(UIVIEwController *) = 0x11a32dc0 <ScheduleVIEwController: 0x11a32dc0>(lldb) print (BOol) [vc_1 isKindOfClass:(Class)[ScheduleVIEwController class]](BOol) = YES(lldb) po [vc_1 class](ID) = 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) = YES(lldb) print (BOol) vcBool(BOol) = 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文件.
感谢大家的支持.
总结以上是内存溢出为你收集整理的objective-c – isKindOfClass不能按预期工作全部内容,希望文章能够帮你解决objective-c – isKindOfClass不能按预期工作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)