создайте BOOL с именем shouldFireTimer в viewDidLoad или аналогичном и обновляйте его значение каждый раз, когда вы обнаруживаете длинное нажатие
-(void) longPressDetectedgesture: (UILongPressGestureRecognizer*)recognizer {
_btnautoscrollstop.hidden = NO;
_btnautoscroll.hidden = YES;
if ( shouldFireTimer ) {
[autoscrollTimer invalidate];
autoscrollTimer = nil;
} else {
autoscrollTimer = [NSTimer
scheduledTimerWithTimeInterval:(55.0/1000.0)
target:self
selector:@selector(autoscrollTimerFired:)
userInfo:nil
repeats:YES];
}
shouldFireTimer = !shouldFireTimer;
}
- (void)autoscrollTimerFired:(NSTimer*)timer {
CGPoint scrollPoint = self.table.contentOffset;
scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 1);
[self.table setContentOffset:scrollPoint animated:NO];
}
или, как сказал Мэтт выше, возможно, просто проверьте нулевой статус вместо использования BOOL. Я предлагаю использовать BOOL, так как вы, возможно, запускаете autoscrollTimerFired и в других обстоятельствах (например, с помощью кнопки), т. Е. Когда вы хотите вызвать его, он может быть не равен нулю.