NSTimer Absturz mit EXC_BAD_ACCESS auf Iphone, wenn invalidate
-
22-07-2019 - |
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
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