0

嗨,我添加了一个准备 segue 代码以传输信息,但是我收到了一个错误。

我有一个标签栏控制器。它有 4 个选项卡。每个选项卡都有一个导航控制器和一个作为根视图控制器的 VC。

从 tab 1-->nav controller-->VC 1 我需要取一个值到 tab2-->nav controller --->VC1

(也是在选项卡 2 处连接到导航控制器的 segue,或在选项卡 2 处连接到根视图)提前谢谢

错误:customizableViewControllers]:无法识别的选择器发送到实例 0xf19bd60(但我要去选项卡 2(索引 1))?我的错误在哪里?

    if ([segue.identifier isEqualToString:@"ResultsSegue"])

        {
//the root VC at tab 2
            ResultsIndexViewController*controller=[[ResultsIndexViewController alloc]init];

            UITabBarController *tabController = [segue destinationViewController];
            controller = (ResultsIndexViewController*)[[tabController customizableViewControllers]objectAtIndex:1];//crashing here
            controller.resultsArray=[NSMutableArray arrayWithArray:_matchedResultsArray];

        }
    }
4

1 回答 1

1

这部分代码

 [1]   UITabBarController *tabController = [segue destinationViewController];
 [2]    controller = (ResultsIndexViewController*)[[tabController customizableViewControllers]objectAtIndex:1];//crashing here

充满了误解。

在 [1] 中,您将 destinationViewController (type UIViewController) 分配给 type 的对象UITabBarController。这是编译器合法的(UITabBarController继承自UIViewController所以它们都是类型UIViewController),但它并不能真正反映正在发生的事情。您的转场将是 the UIViewControlleror it's UINavigationController

因此,在第 [2] 行中,当您尝试将tabController用作选项卡栏控制器时,它会崩溃(因为它不是一个)。

您需要重新设计您的项目...忘记 Segue,并使用标签栏控制器。就像是...

- (IBAction)moveToTab2:(id)sender {
    ResultsViewController* resultsVC = (ResultsViewController*)
                [[self.tabBarController viewControllers] objectAtIndex:1];
    resultsVC.resultsArray=
                [NSMutableArray arrayWithArray:_matchedResultsArray];
    [self.tabBarController setSelectedViewController:resultsVC;
}
于 2013-01-10T16:42:26.440 回答