Iphone 更新模态视图变量的值

Iphone 更新模态视图变量的值,iphone,Iphone,我正在尝试创建一个显示我的应用程序冠军的模式视图。 在模态视图中有一个名为champ的NSMutableString变量, 它应该由主视图中的returnChamp函数更新。 champ字符串在主视图中设置正确, 但在模态视图中,champ值显示为(null)。 事实上,它似乎甚至没有进入returnChamp函数。 很明显,我打电话或执行returnChamp有问题, 但是我有另一个函数做类似的事情,它工作得很好 谁能帮帮我吗 -(void) mainView{ ..... c

我正在尝试创建一个显示我的应用程序冠军的模式视图。 在模态视图中有一个名为champ的NSMutableString变量, 它应该由主视图中的returnChamp函数更新。 champ字符串在主视图中设置正确, 但在模态视图中,champ值显示为(null)。 事实上,它似乎甚至没有进入returnChamp函数。 很明显,我打电话或执行returnChamp有问题, 但是我有另一个函数做类似的事情,它工作得很好

谁能帮帮我吗

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

}


self.parentViewController
可能实际上不是对对象的引用。出于某种原因,框架似乎总是坚持将
UINavigationController
设置为
self.parentViewController
——即使是modals,如果还没有,框架也会创建一个。这可能不会被注意到,因为您正在将其强制转换为
MainViewController
类型

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

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

modalWinner=[[modalwinnervewcontroller alloc]init]
modalWinner.champName=myValue;/*在显示控制器之前设置值*/
[自我呈现ModalViewController:modalWinner动画:是];

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


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

谢谢您的回答。但是,还有什么其他方法可以从mainview更新champName?有几种可能的方法-可能最简单的方法是向winner view控制器添加属性(例如,“分数”),并在显示控制器之前设置modalWinner.score的值。若需要执行任何代码来处理值的显示,您可以将其放入视图中。谢谢您的回复。我试过modalWinner.champName=champ;从主视图,但它给了我“无法设置对象-只读属性或找不到设置器”错误。。。如果我要在模态视图的viewwillbeen中设置值,我将如何从主视图访问它?您需要在.h文件中为任何类
modalWinner
声明
champName
属性(我们称之为
modalwinnervewcontroller
),然后在同一类的.m文件中添加
@name
。然后,紧接着
winner=[[modalwinnervewcontroller alloc]init]
设置
winner.champName=champ
。如果需要代码来获取更新后的值并更改UI元素以反映更新后的值,请将该代码放入
视图中,该视图将显示
ModalWinnerViewController
方法,并且应用程序将在显示视图之前立即运行该代码。我希望这能澄清问题。同样,对于一个类似的问题,也有一个不同的解决方案。
- (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];
}