Frage

Ich habe Setup zwei Timer in meiner Anwendung, die sowohl für jeden ein paar Sekunden wiederholt. Alles funktioniert gut, außer wenn Zeit ist, die Zeitgeber zu entkräften. Wenn das Telefon gesperrt ist, möchte ich diesen Timer ungültig zu machen und sie dann neu, wenn das Telefon entsperrt ist.

Im die Benachrichtigungen verwenden zu realisieren, wenn ungültig zu machen / die Timer erstellen.

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify_didBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify_willResigneActive:) name:UIApplicationWillResignActiveNotification object:nil];

Dies ist, was die notify_didBecomeActive Methode enthält:

clockTicker = [[NSTimer scheduledTimerWithTimeInterval: 1  
                                            target: self  
                                          selector: @selector(showActivity)  
                                          userInfo: nil  
                                           repeats: YES] retain];

alarmTicker = [[NSTimer scheduledTimerWithTimeInterval: CONST_ALARMTIMER  
                                               target: self  
                                             selector: @selector(checkAndLaunchAlarm)  
                                             userInfo: nil  
                                              repeats: YES] retain];

Dies ist die notify_willResigneActive Methode enthält:

if (alarmTicker) {
    [alarmTicker invalidate];
    [alarmTicker release];
    alarmTicker = NULL;
}

if (clockTicker) {
    [clockTicker invalidate];
    [clockTicker release];
    clockTicker = NULL;
}

Das Problem ist, dass, wenn ich debuggen diese auf dem zweiten Timer Invalidier ich den Fehler. Die seltsame Sache, dass, wenn ich die Befehle des Timer (wie zuerst ungültig macht die clockTicker) wechseln .. Ich habe immer noch den Fehler auf dem zweiten Timer.

Was könnte ich falsch machen?

Danke, Leonardo

War es hilfreich?

Lösung

gibt den Timer ungültig machen, keine Notwendigkeit, nach entkräften zu lösen, das ist, warum seine Krachen. Aber ich habe gerade bemerkt, dass Sie den Timer sind Halte ... im nicht sicher, dass dies entweder notwendig ist.

Andere Tipps

Sie müssen nur alarmTicker und clockTicker auf Null in den Methoden setzen, die Timer Feuer und auf diese Weise, wenn Sie Ihren Scheck tun, wenn (alarmTicker) oder wenn (clockTicker) sie werden den richtigen Wert hat.

Ich bin mir nicht sicher, was den Timer auf NULL Einstellung macht es im Gegensatz zu null Einstellung, aber ich weiß, dass, wenn Sie einen Anruf auf einem Null-Objekt zu machen, es ist ein no-op. Wenn Sie einen Anruf auf ein Null-Objekt machen, denken, es stürzt, obwohl ich dies nicht überprüft haben. Dieser Beitrag könnte helfen: NULL vs nil in Objective-C

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top