[英]Method being called constantly until the view is dismissed
我有一個endGame視圖,該視圖在用戶完成游戲時加載。 它以模態形式顯示在游戲視圖上方。 在viewDidLoad中,我正在調用一種方法來保存數據,例如得分和他們玩過的某種游戲模式。 該方法被多次調用-大約每秒一次,但這是不規則的。
結束游戲畫面:
#import "endGameScreen.h"
#import "ViewController.h"
#import "GameData.h"
@implementation endGameScreen
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)awakeFromNib {
[self getAchievementData];
}
- (void)getAchievementData {
[RWGameData sharedGameData].timedPlayed++;
NSLog(@"Timed played: %ld", [RWGameData sharedGameData].timedPlayed);
}
- (void)writeAchievementforKey:(NSString *)achKey {
[data setObject:[NSNumber numberWithInteger:1] forKey:achKey];
[data writeToFile: path atomically:YES];
}
我正在像這樣加載endGameScreen類: GameViewController.m
- (void)viewDidLoad {
if (self.gameMode == 1) {
self.gridSize = 3;
secondsLeft = 10;
[self countdownTimer];
}
}
-(void)countdownTimer {
secondsLeft = minutes = seconds = 0;
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];
}
// Timer in the game going to zero
- (void)updateCounter:(NSTimer *)theTimer {
if (secondsLeft > 0 ){
secondsLeft -- ;
minutes = (secondsLeft % 3600) / 60;
seconds = (secondsLeft %3600) % 60;
timePlayedLabel.text = [NSString stringWithFormat:@"%02d:%02d", minutes, seconds];
if (secondsLeft == 1) {
//Call endGame method
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(endGame)
userInfo:nil
repeats:NO];
}
}
else {
secondsLeft = 10;
}
}
- (void)endGame {
[timer invalidate];
[self saveScores];
//Segue in the storyboard
[self performSegueWithIdentifier:@"endGame" sender:self];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"endGame"]) {
endGameScreen *vc = [segue destinationViewController];
if (self.gameMode == 1) {
vc.gameMode = 1;
}
else {
vc.gameMode = 2;
}
}
}
我收到的NSLog消息不斷增加,顯示“模式一:27”,“模式一:28”,“模式一:29”,依此類推。
您的-endGame
方法不會使您認為是的計時器失效。
-updateCounter:
正在使用新的一次性計時器覆蓋您的timer
實例變量,以調用-endGame
,但這不會停止另一個計時器,即-countdownTimer
創建的-countdownTimer
。 這定時器繼續開火,呼吁-updateCounter:
這使創造更多的單次計時器來調用-endGame
。 因此,這被反復調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.