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

时间:2013-11-27 03:32:50

标签: ios iphone objective-c segue

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

我正在尝试解决的问题

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

我的问题

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

这就是我的尝试:

基于此sample

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)

谢谢。

2 个答案:

答案 0 :(得分:4)

因为您创建的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;
    }
}

答案 1 :(得分:3)

有两件事你做得不对:

  • 您正在临时视图控制器上设置数组,该控制器与您的segue和
  • 激活的实例不同
  • 您过早记录数组:{/ 1}在之前被称为,segue代码设法将数组放入新的视图控制器。

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

viewDidLoad:

要解决第二个问题,请将日志记录代码移至- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"changetoResults"]) { ContainerViewController *container = segue.destinationViewController; container.array = _results; } } viewDidAppear:应该开始显示正确数量的项目。