NSTimer не признан недействительным - PullRequest
1 голос
/ 11 октября 2011

Я использую таймаут для RKObjectManager.Мой фрагмент кода выглядит следующим образом:

-(void)getObjects
{
    RKObjectManager *sharedManager = [RKObjectManager sharedManager];

    [self showLoading];
    [sharedManager loadObjectsAtResourcePath:self.resourcePath delegate:self];

    // Setting timeout here. goto failure 
    self.nTimer = [NSTimer scheduledTimerWithTimeInterval:TIMEOUT_INTERVAL target:self selector:@selector(didEncounterError) userInfo:nil repeats:NO];
}

- (void) didEncounterError
{    
    [self hideLoading];
    [self standardErrorHandling];

    //invalidate timer, this is done to ensure that if error occurs before timer expiry time, the error will not show again when timer is up (ISSUE HERE)
    [self.nTimer invalidate];
}

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects 
{
    ....
    //invalidate timer if load is successful (no issue here)
    [self.nTimer invalidate];
}


- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error 
{
    ....
    //trigger encounter error method
    [self didEncounterError];
}

В вышеприведенной реализации я всегда аннулирую таймер в методе «ошибка с обнаружением».Это должно смягчить случаи, когда ошибка произошла до истечения таймера.В этом случае я хочу сделать недействительным таймер, чтобы предотвратить повторное появление сообщения об ошибке.

Однако, я все еще получаю сообщение об ошибке во второй раз после того, как ошибка произошла (до истечения таймера).Похоже, что недействительность в методе «ошибка с ошибкой» не сработала.Любой совет, что не так с моим кодом?

1 Ответ

7 голосов
/ 11 октября 2011

Аннулирование таймера должно происходить в потоке, в котором он запланирован, в приведенном выше случае он вызывается в другом потоке (обратные вызовы).Можете ли вы иметь метод, который делает это недействительным, и вызывать этот метод, используя «executeSelectorOnMainThread» в ваших методах обратного вызова?

...