当索引未知时,从静态库切换到UITabBarController内的ViewController



我正在处理一个静态库,在项目内部有一个UITabBarController,我需要在视图控制器之间切换。条件是我有UIViewControllers的名称,但不知道它的索引值。我该怎么做。我试着获取视图控制器的数组并找到它的索引,但它给出了错误。

    UIStoryboard * storyboard = [[[UIApplication sharedApplication] keyWindow] rootViewController].storyboard;
    NSString *ViewtoSwitch =@"home";
    UIViewController* myVC = [storyboard instantiateViewControllerWithIdentifier:ViewtoSwitch];
    UITabBarController *tabBarController = (UITabBarController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
    NSMutableArray *arr = [[tabBarController viewControllers] mutableCopy];
    NSString *stringToSearch = @"home:";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",stringToSearch];
    NSUInteger index = [arr  indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
              return [predicate evaluateWithObject:obj];
            }];
    [tabBarController setSelectedIndex:index];

但它给出的错误如下:由于未捕获的异常"NSInvalidArgumentException"而终止应用程序,原因:"无法在集合(非集合)中使用in/contains运算符"

NSMutableArray *arr = [[tabBarController viewControllers] mutableCopy];

在之后

迭代arr对象并使用isKindOfClass来验证是否是您想要的类

我从PKT得到了suggeyion之后的解决方案,下面的代码对我有效。

NSString *ViewtoSwitch =@"home";
UITabBarController *tabBarController = (UITabBarController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
NSMutableArray *arr = [[tabBarController viewControllers] mutableCopy];
NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i = 0; i < [arr count]; i++) {
    [array addObject:NSStringFromClass([[arr objectAtIndex:i] class])];
}
int index = (int)[array indexOfObject:ViewtoSwitch];
[tabBarController setSelectedIndex:index];

最新更新