Pergunta

Eu tenho configuração dois temporizadores no meu aplicativo que ambos se repete a cada alguns segundos. Tudo funciona bem, exceto quando é hora de invalidar os temporizadores. Quando o telefone está bloqueado, quero invalidar aqueles temporizadores e, em seguida, recriá-los quando o telefone é desbloqueado.

Im usando as notificações para perceber quando invalidar / criar os temporizadores.

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

Isto é o que o método notify_didBecomeActive contém:

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];

Este método notify_willResigneActive contém:

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

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

O problema é que quando eu depurar isso no segundo invalidate temporizador eu recebo o erro. O estranho é que se eu mudar as ordens dos temporizadores (como primeiro invalidar a clockTicker) .. Eu ainda tenho o erro no segundo timer.

O que eu poderia estar fazendo de errado?

Obrigado, Leonardo

Foi útil?

Solução

lançamentos invalidar o timer, não há necessidade de liberar após invalidar, é por isso que o seu bater. Mas eu notei que você está retendo o temporizador ... eu não tenho certeza que isso é necessário também.

Outras dicas

Você só precisa definir alarmTicker e clockTicker a zero dentro dos métodos que os temporizadores de fogo e de que maneira, quando você faz a sua seleção se (alarmTicker) ou se (clockTicker) terão o valor correto.

Eu não sou certo o que ajustar o temporizador para NULL faz em oposição a defini-lo como nulo, mas eu sei que se você fizer uma chamada em um objeto nulo, é um não-op. Se você fazer uma chamada em um objeto NULL, ele acha que ele trava, embora eu não ter verificado isso. Este poder pós ajuda: NULL vs nulo em Objective-C

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top