[objective-c]切换到 ViewController 里面 UITabBarController 从静态库指数为未知时,

发布时间: 2016/10/2 5:39:48
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我工作在一个静态库和项目里面都有我需要切换视图控制器 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',原因: '在不能使用 / 包含运算符与集合 (不是一个集合)'

解决方法 1:

我接到解决方案后 suggesyion PKT 下面的代码工作对我来说。

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];
赞助商