IOS如何将数组转换为另一个视图控制器

时间:2015-10-30 05:23:17

标签: ios arrays view controller segue

我有一个初始视图控制器(A)和一个导航控制器链接到另一个视图控制器(B)。如何通过segue将数组从A传递到Big?

这是我的segue代码。

  -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"prepareForSegue: %@", segue.identifier);

    if ([segue.identifier isEqualToString:@"severityInfo"]) {
        UINavigationController *segueNavigation = [segue destinationViewController];
        NSLog(@"%@",[[segueNavigation viewControllers]objectAtIndex:0]);
        IncidentOverviewViewController *B = (IncidentOverviewViewController *)[[segueNavigation viewControllers]objectAtIndex:0];
        B.BArray = feeds;
    }
}

运行此代码后出现此错误:reason:' -reason:'无法找到segue' severityInfo'的导航控制器。 Push segues只能在源控制器由UINavigationController实例管理时使用。'

我在第二个视图控制器(事件视图控制器)中声明了这个方法,如下所示:

-(void)setFeeds:(NSMutableArray*)received
{
    BArray = received;

    NSLog(@"feeds are%@", BArray);

}

我已经在故事板中为我的初始视图控制器调用插入了标识符"查看控制器"这个初始视图控制器连接到导航视图控制器,然后从导航视图控制器连接到我的目标视图控制器调用" incidentOverviewViewController"

4 个答案:

答案 0 :(得分:0)

这是如何完成的

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"prepareForSegue: %@", segue.identifier);

    if ([segue.identifier isEqualToString:@"severityInfo"]) {
        UINavigationController *segueNavigation = [segue destinationViewController];
        ViewController *B = (ViewController *)[segueNavigation topViewController];
        [B setBArray:feeds];

    }
}

答案 1 :(得分:0)

是的,您需要在要调用的视图控制器中定义方法。你怎么称呼它?您可以将方法定义为任何其他方法。

您还应该将其投放到IncidentOverviewViewController,如果是类型,而不是ViewController

方法将是这样的

-(void)setBArray:(whatevertype)array
{
    Dowhatever
}

取决于您的类型和存储方法。

答案 2 :(得分:0)

在B视图控制器中创建一个数组作为属性,并在segue方法中执行以下操作: -

if ([segue.identifier isEqualToString:@"severityInfo"])
    UINavigationController *segueNavigation = [segue destinationViewController];
    ViewController *B = (ViewController *)[segueNavigation topViewController];
    B.array = feeds;
}

答案 3 :(得分:-1)

试试这个

  -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
     if ([segue.identifier isEqualToString:@"severityInfo"]) {
        UINavigationController *segueNavigation = [segue destinationViewController];
       NSLog(@"%@",[[segueNavigation viewControllers]objectAtIndex:0]);
        IncidentViewControllerClassName *B = (IncidentViewControllerClassName *)[[segueNavigation viewControllers]objectAtIndex:0];
        B.BArray = feeds;
    }
}

在IncidentViewControllerClassName.h文件中

 @property(nonatomic,strong) NSArray *BArray;

要操作Push segue,您需要将导航控制器嵌入到视图控制器中,您将从该控制器转移到另一个视图控制器。 因此,将第一个VC嵌入导航控制器中。 你的故事板应该是这样的

NavController - >(RootVC)---> VC1(segue:severityInfo)--- NavigationControlelr - (root)VC2。

希望可以让你理解为什么错误会持续存在。 要清除它,请将VC1或视图控制器作为导航控制器的根VC推进。