我有一个初始视图控制器(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"
答案 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推进。