更新模态视图变量的值

时间:2011-03-06 19:10:14

标签: iphone

我正在尝试制作一个显示我的应用程序冠军的模态视图。 在模态视图中有一个名为champ的NSMutableString变量, 应该由主视图中的returnChamp函数更新。 冠军字符串在主视图中正确设置, 但在模态视图中,冠军值显示为(null)。 事实上,它似乎甚至没有进入returnChamp函数。 所以我的调用或实现returnChamp显然有问题, 但是我有另外一个功能相似,功能正常。

有人可以帮助我吗?

-(void) mainView{
.....
        champ = [[currentPlayers objectAtIndex:playerIndex] retain];
        NSLog(@"%@",champ);
        modalWinner = [[winner alloc] init];
        modalWinner.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        [self presentModalViewController:modalWinner animated:YES];

}

- (NSMutableString *) returnChamp{
NSLog(@"returnChamp");
return champ;

}

//in modalWinner
-(void) modalView{
..............


champName = [[NSMutableString alloc] init];
NSLog(@"%@", [(MainViewController *)self.parentViewController returnChamp]);
champName = [(MainViewController *)self.parentViewController returnChamp];
UIImage *champImage = [UIImage imageNamed:champName];
}

1 个答案:

答案 0 :(得分:1)

self.parentViewController实际上可能不是对您对象的引用。出于某种原因,似乎框架始终坚持将UINavigationController设置为self.parentViewController - 即使对于模态,如果还没有模态,它将创建一个。{这可能会被忽视,因为您将其转换为MainViewController类型。

您需要找到一种不同的方式使原始对象可以与之通信,或者在呈现之前将适当的值传递给新实例化的控制器。

例如,如果向模态类添加champName属性,则可以执行以下操作:

modalWinner = [[ModalWinnerViewController alloc] init];
modalWinner.champName = myValue; /* Set value before presenting controller */
[self presentModalViewController:modalWinner animated:YES];

使用此值更新UI可能需要一些代码。模态视图控制器的viewWillAppear方法是一个很好的地方,因为在呈现视图之前框架会调用它。

请注意,此基于属性的方法也可用于保留对预期父对象的引用。 see here用于解决类似问题的不同方法。