Ios 将一个视图标签的内容发送到另一个视图标签时获取(NULL)
我一直在尝试创建一个记分系统,一旦计时器结束,就会出现一个新的视图并打印出最终的分数。当我跑步时,我的计时器工作正常,当我得到正确答案时,初始分数也正常。但是,当我尝试将第二个视图控制器的视图最终分数标签更新为计时器达到0后收到的最后一个分数时,第二个视图控制器的最终分数标签会打印出一个0,或者如果我将其更改为字符串a(null) 下面是我的代码,您可以看到发生了什么 FirstViewController.m 好的,基本上我总结了以下四种方法:Ios 将一个视图标签的内容发送到另一个视图标签时获取(NULL),ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,我一直在尝试创建一个记分系统,一旦计时器结束,就会出现一个新的视图并打印出最终的分数。当我跑步时,我的计时器工作正常,当我得到正确答案时,初始分数也正常。但是,当我尝试将第二个视图控制器的视图最终分数标签更新为计时器达到0后收到的最后一个分数时,第二个视图控制器的最终分数标签会打印出一个0,或者如果我将其更改为字符串a(null) 下面是我的代码,您可以看到发生了什么 FirstViewController.m 好的,基本上我总结了以下四种方法: timerRun(保存时间循环和结束时间的条件)
-(void)timerRun
{
self.secondsCount--;
int seconds = self.secondsCount;
NSString *timerOutput = [NSString stringWithFormat:@"%i",seconds];
self.timerLabel.text = timerOutput;
if(self.secondsCount == 0)
{
[self.gameCountDownTimer invalidate];
self.objSecondView = [[SecondViewController alloc]initWithNibName:@"SecondViewController." bundle:nil];
self.finalScore =self.gameScore;
NSLog(@"THE FINAL_CURRENT SCORE IS %d!!!!!!!!!!!!!",self.finalScore);
[self performSegueWithIdentifier:@"secondViewScreen" sender:self];
}
}
-(void)setTimer
{
self.secondsCount = TIMER_LENGTH;
self.gameCountDownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerRun) userInfo:nil repeats:YES];
}
- (void)DetectDrawing:(DrawingGameGlyphDetectorView*)theView glyphDetected:(WTMGlyph *)glyph withScore:(float)score
{
NSNumber *number = [[NSNumber alloc]initWithInt:10];
if (score < GESTURE_SCORE_THRESHOLD)
return;
else if([glyph.name isEqualToString:convertAnswer])
{
NSLog(@"WOOOOOOOO!HOOOOOO!~~~");
self.gameScore += GAME_SCORE;
if(self.answer > number)
{
self.gameScore += GAME_SCORE_BONUS;
}
self.scoreLabel.text = [NSString stringWithFormat:@"Score:%i",self.gameScore];
self.objSecondView.finalScore = self.scoreLabel.text;
[self viewDidAppear:YES];
}
}
- (void)viewDidLoad
{
[self setTimer];
self.gameScore = 0;
[super viewDidLoad];
}
您不需要分配新的“SecondViewController”。塞格会帮你的。 基本上,您不希望有从一个ViewController到另一个ViewController的引用。这很可能会产生保留周期 您需要做的只是:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
SecondViewController *dest = [segue destinationViewController];
dest.finalScoreText.text = [NSString stringWithFormat:@"%i",self.gamescore];
}
嗯,我还是不能让它不显示0。只要确保,我将prepareForSegue方法放在我的FirstViewController中,我是否需要在第二个ViewController中调用任何东西?我试图阅读有关该方法的文档,想知道是否需要在整个故事板中设置segue。
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
SecondViewController *dest = [segue destinationViewController];
dest.finalScoreText.text = [NSString stringWithFormat:@"%i",self.gamescore];
}