Проверьте, закончил ли селектор NSTimer - PullRequest
1 голос
/ 09 февраля 2012

Я вызываю сервисный метод через NSTimer через каждые 3 секунды. Однако перед каждым вызовом этого метода я хочу проверить, завершен ли предыдущий таймер или нет. Я сделал следующее, что не привело к успеху.

timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(CallParseOperation) userInfo:nil repeats:YES]; 

CheckOperation :

-(void)CheckOperation{

    if([Data getInstance].kOperation == TRUE)
    {
        [self CallParseOperation];
    }

}

CallParseOperation :

-(void)CallParseOperation{


    [Data getInstance].kOperation = FALSE;
    operationQueue=[[NSOperationQueue alloc] init];
    ParseOperation *obj=[[ParseOperation alloc] initWithMembers:ID];
    NSInvocationOperation *reloadOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(tableReload) object:nil];
    [reloadOp addDependency:obj];
    [operationQueue addOperation:obj];
    [operationQueue addOperation:reloadOp];
    //[operationQueue waitUntilAllOperationsAreFinished];
    [obj release];
    [reloadOp release];

} 

Где-то в конце этой реализации я устанавливаю bool как TRUE. Но это не работает. Элемент управления просто застрял внутри этого таймера.

1 Ответ

3 голосов
/ 09 февраля 2012

Вы должны установить kOperation в ЛОЖЬ, прежде чем вызывать метод CallParseOperation, иначе он всегда будет истинным и будет выполняться каждый раз.

Вместо того, чтобы устанавливать таймер для повторения, включите его один раз, а затем снова включите в конце анализа. Таким образом, он будет выполняться каждые x секунд ПОСЛЕ обработки, а не каждые x секунд независимо от того, завершил ли он предыдущий процесс или нет.

...