簡體   English   中英

不斷調用方法,直到視圖消失

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM