IOS如何将一个数组连接到另一个视图控制器

Posted

技术标签:

【中文标题】IOS如何将一个数组连接到另一个视图控制器【英文标题】:IOS how to segue an array to another view controller 【发布时间】:2015-10-30 05:23:16 【问题描述】:

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

这是我的转场代码。

  -(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;
    

运行此代码后出现此错误:原因:'-原因:'找不到用于 segue 'severityInfo' 的导航控制器。只有当源控制器由 UINavigationController 的实例管理时,才能使用推送 segue。'

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

-(void)setFeeds:(NSMutableArray*)received

    BArray = received;

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


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

【问题讨论】:

这段代码似乎有什么问题? [IncidentOverviewViewController setBArray:]: unrecognized selector sent to instance 0x7faf025bbf40' 这是我使用上述代码后的错误 【参考方案1】:

这是怎么做的

-(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];

    

【讨论】:

有这个错误:[IncidentOverviewViewController setBArray:]: unrecognized selector sent to instance 0x7faf025bbf40' 我还需要在目标视图控制器(IncidentOverviewViewController)中声明“setBarray”吗?如果需要怎么做? ViewController 旨在成为您尝试推送的 UINavigationController 的 rootViewController,因此如果您的 UINavigationController 的 rootViewController 是“IncidentOverviewViewController”,则用它替换“ViewController”,并且您需要创建一个属性对于“IncidentOverviewViewController”中的 bArray 或任何根视图控制器 好的,目前我的第一个视图控制器调用“视图控制器”,然后是我的导航控制器,然后是事件概述控制器。总共有 3 个视图控制器。我链接的 segue 作为来自“视图控制器”的推送" 到导航控制器。所以现在的问题是 ViewController *B 的代码应该是 eventOverviewController *B 还是 ViewController *B? incidentOverviewController【参考方案2】:

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

您还应该将其转换为IncidentOverviewViewController,如果那是类型,而不是ViewController

方法是这样的

-(void)setBArray:(whatevertype)array

    Dowhatever

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

【讨论】:

是的,在incidentoverviewcontroller中如何定义方法?要导入和声明什么? @zac 我很困惑。您之前没有声明过一个方法,但正在做 segues 等? 见上述代码。我已经在我的目标视图控制器调用 eventOverviewController 中声明了我的方法。【参考方案3】:

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

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

【讨论】:

这段代码 ViewController *B = (ViewController *)[segueNavigation topViewController]; “ViewController”是指第一个 viewController 还是第二个视图控制器?如果是第二个视图控制器,则会出现此错误,表示找不到 segue 名称“severityInfo”。 View Controller 基本上就是你的“IncidentOverviewViewController”。所以改变这个。另外请交叉检查您是否创建了从 A 到 B 名称“severityInfo”的转场【参考方案4】:

试试这个

  -(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,您需要将导航控制器嵌入到视图控制器中,从该视图控制器中您要连接到另一个视图控制器。 因此,将您的 First VC 嵌入到导航控制器中。 你的故事板应该是这样的

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

希望能让您理解错误为何持续存在。 要清除它,请将嵌入 VC1 或您从中推送的视图控制器作为导航控制器的根 VC。

【讨论】:

segue 的目标视图控制器是导航控制器而不是第二个视图控制器。 现在的错误是原因:'-[UINavigationController setBArray:]: unrecognized selector sent to instance 0x7fc38e019600' 我想传递给我的第二个视图控制器,即incidentViewController。不将数据传递给导航视图控制器。该怎么做? 请检查编辑,我自己测试过,它按照您给定的情节提要架构工作 请检查编辑

以上是关于IOS如何将一个数组连接到另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

在不同的视图控制器中更改另一个视图的出口

将MapKit注释连接到表视图

如何将 UITabBar 项目连接到 IB 中的视图控制器

将出口连接到子类视图控制器

将原型单元连接到视图控制器 [Swift 4]

iOS 5 拆分视图模式视图控制器弹出窗口:可能还是没有骰子?