繁体   English   中英

将数组发送到下一个视图控制器

[英]send an array to next view controller

在我的应用程序中,我有4个视图控制器,(登录,欢迎,游戏视图和结果视图)。 在游戏视图中,我有两个额外的视图(像这样)[屏幕截图链接到视图]。 我使用web api来获取数据,我的数据由项目组成(每个项目有1个图像和4个字符串)。 项目编号不是常数,因此根据项目的数量(我将其存储在数组中),我将视图从一个转换到另一个,直到我用完项目。(我呈现的方式非常类似于视图转换样本来自在显示最后一个项目之后,我使用perform segue转到下一个视图。

我试图解决的问题

我正在尝试创建一个额外的视图/或视图控制器,它使用我的items数组中的部分信息。

我的问题

为什么我为容器视图数组获取null?(_ results array是包含项目的数组)

这是我试过的:

基于这个问题

GameView

ContainerViewController *container = [[ContainerViewController alloc]init];
container.array = _results;  
[self performSegueWithIdentifier:@"changetoResults" sender:self];

ContainerViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"items in the array - containerviewcontroller.m %@",array);   
}

这是控制台:

2013-11-26 19:11:29.157 GuessTheImage[3664:70b] there are 8 , of items in the current index -gameviewcontroller.m
2013-11-26 19:12:44.439 GuessTheImage[3664:70b] items in the array - containerviewcontroller.m (null)

谢谢。

因为您创建的ViewController不是您通过segue访问的ViewController。 如果你想使用segue,你可以在prepareForSegue方法中获取目标ViewController(它已经存在)并根据需要调整它(在你的情况下 - 添加一个数组)。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"changetoResults"])
    {
        ContainerViewController *vc = (ContainerViewController *)[segue destinationViewController];
        vc.array = _results;
    }
}

您没有正确执行两件事:

  • 您正在一个临时视图控制器上设置数组,该控制器与您的segue激活的实例不同,并且
  • 您过早地记录数组: viewDidLoad:在segue代码设法将数组放入新视图控制器之前调用。

要解决第一个问题,请删除“perform segue”调用上方的两行,然后添加以下方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"changetoResults"]) {
        ContainerViewController *container = segue.destinationViewController;
        container.array = _results;
    }
}

要解决第二个问题,请将日志记录代码移到viewDidAppear: NSLog应该开始显示正确的项目数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM