在我的应用程序中,我有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)
谢谢。
答案 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)
有两件事你做得不对:
要解决第一个问题,请删除“perform segue”调用上方的两行,然后添加此方法:
viewDidLoad:
要解决第二个问题,请将日志记录代码移至- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"changetoResults"]) {
ContainerViewController *container = segue.destinationViewController;
container.array = _results;
}
}
。 viewDidAppear:
应该开始显示正确数量的项目。