- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我正在做一个 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 并将其用作导航 Controller 的 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 问题的解决方案时,我注意到在测试 session 开始时控制台上有很多警告。警告是这样的:
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 按预期工作。
感谢大家的支持。
关于objective-c - isKindOfClass 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12386189/
如何确定结构是否属于特定类型?换句话说,如果我得到一个对象,我怎么知道底层类型是一个结构体? +(BOOL)isPrimitive:(id)input { return [input isKi
我有一个方法someMethod。此方法在某些时候具有以下 if-else 条件。 - (void) someMethod { // ... some more code ... if
我只想抓取ScrollView中的按钮标签1~5,其他数据不需要抓取 (void)layoutScrollImages { UIImageView *view = nil; NSArr
我有一个无法理解的问题,我正在使用一个用于使用Map Open Source Map(https://github.com/route-me/route-me)的库,该示例运行完美,并且我相信不是与代
我原以为这是一个身份,但它现在似乎对我不起作用。 看我的 lldb 提示符: po [self class] ==> MyCustomClass po [MyCustomClass 类] ==> My
最新版本的 Objective-C 和 XCode (4.4)。 我有一个代码片段,我不明白为什么我可以使用一些行,让我解释一下: // For understanding purpose : (NS
我创建了一个自定义类AnimalView,它是UIView的子类,包含一个UILabel和一个UIImageView >。 @interface AnimalView : UIView { U
我正在检查 toViewController(我的 tabBar 中的第二个选项卡)是否属于 MatchCenterViewController 类,但是 else 语句正在运行,这告诉我它不属于那个
我有一个 ViewController 和一些供用户输入的标签和文本字段,在某些时候我需要遍历所有文本字段以收集用户的输入。 override func viewDidLoad() { sup
我有一个与 Cocoapods (ECSlidingViewController) 一起安装的库。在代码中,比较是使用 -isKindOfClass 完成的。在调试器中,打印描述和一切都表明这个变量是
有没有比更好的方法来查看一个对象是否具有多个类之一 if ([item isKindOfClass:[NSArray class]] || [item isKindOfClass:[NSNumber
引用下面的代码,我发现 isKindOfClass 无法识别类。 id parent = [self.tableDataSource objectAtIndex:indexPath.row]; //p
出于各种原因,为了使数组的索引与其他事物保持一致,我在数组中加入了[NSNull null]。像这样: NSArray *arr = @[obj1, obj2, obj3, [NSNull null]
有人可以解释为什么 isKindOfClass 会根据实例的创建方式返回不同的结果吗? @interface BaseClass ... @interface DerivedClassA : Base
我的一个单元测试失败了,原因出乎我的意料。似乎对 isKindOfClass 的调用返回了 NO,但是当我调试并单步执行时,似乎没有理由返回 NO。 代码是: if ([self.detailItem
我正在做一个 iOS5+ 项目(xcode 4.4.1 SDK 5.1) 我在单元测试中有这段代码: [_appDelegate application:nil didFinishLaunchingW
Swift 提供了is 关键字(和as?)来检查一个对象是否可以成功向下转型: if foo is MyClass { // ... } 但是NSObjectProtocol也提供了原来的fu
Swift 中的 isKind(of aClass: AnyClass) 和 isMember(of aClass: AnyClass) 函数有什么区别? Objective-C 中的原始问题 Wha
最近升级了 XCode8 我在 isKindOfClass 中遇到问题这段代码一直有效到 iOS9 的方法但在 iOS10突然[items isKindOfClass: [NSMutableArray
我有以下代码来根据 rvc 的类型确定不同的操作: let rvc = UIApplication.sharedApplication().delegate.window?.rootViewCont
我是一名优秀的程序员,十分优秀!