2016-03-21 9 views
0

Ich erstelle ein Spiel, in dem der Benutzer Punkte belohnt, während die App im Hintergrund läuft oder nicht läuft. Wenn die Anwendung vollständig geschlossen ist, sollten sie dennoch Punkte erhalten. Momentan mache ich das mit einem NSTimer, aber ich habe überall gelesen, dass Timer nicht im Hintergrund ausgeführt werden können. Hier ist, was ich habe und wie ich es beheben:Scoring-Aufgaben im Spiel im Hintergrund ausführen objective-c

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    score = [[NSUserDefaults standardUserDefaults] integerForKey:@"score"]; 
    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]; 
    timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(score) userInfo:nil repeats:YES]; 
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 
} 

-(void) score{ 
    score++; 
    [[NSUserDefaults standardUserDefaults] setInteger:score forKey:@"score"]; 
} 
+0

Es gibt eine bestimmte Zeitbegrenzung für die Ausführung von Hintergrundaufgaben, wenn Ihre App im Hintergrund ausgeführt wird. Wenn Sie diese Zeit verstreichen lassen, können Sie keine Aufgaben mehr ausführen. Sie sollten in Benachrichtigungen schauen, anstatt Aufgaben im Hintergrund auszuführen. –

+0

Ich werde in das @ TejaNandamuri gehen – John55

Antwort

1

Sie können eine „Endzeit“ mit NSUserDefault in applicationDidEnterBackground Verfahren eingestellt. In applicationDidBecomeActive erhalten Sie die verstrichene Zeit seit der "Endzeit" und Sie setzen Ihre Punktzahl von dieser verstrichenen Zeit.

+0

Okay, aber wie würde ich die verstrichene Zeit von der Endzeit bekommen – John55