NSTimer не влияет ...? - PullRequest
       17

NSTimer не влияет ...?

1 голос
/ 02 февраля 2011

Я попытался вызвать [self setNeedsDisplay: YES] в селекторе NSTimer, чтобы вызвать метод drawRect.

Сначала я поместил код инициализации NSTimer в кнопку func:

-(IBAction)buttonPush:(id)sender
{
   myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
    target:self
  selector:@selector(myTimerAction:)
  userInfo:nil
  repeats:YES];
}

-(void)myTimerAction:(NSTimer *) timer
{  
[self setNeedsDisplay:YES];
} 

"setNeedsDisplay" вызывается нормально, но код внутри drawRect никогда не вызывается:

- (void)drawRect:(NSRect)dirtyRect 
{
NSLog(@"drawRect");
}

Затем я попытался переместить код инициализации NSTimer в "- (id) initWithFrame: (NSRect)рамка ", то все работает просто отлично.(drawRect вызывается правильно каждые 1 сек).

В чем разница между двумя методами выше?Что мне делать, если я хочу активировать таймер в кнопке?

Ответы [ 2 ]

1 голос
/ 04 февраля 2011

Просто интересно, в каком классе находится этот код? Я бы предположил, что действие buttonPush: находится внутри контроллера, правильно?

Если это так, то вы должны иметь:

-(void)myTimerAction:(NSTimer *) timer
{
  [[self view] setNeedsDisplay:YES];
}

потому что setNeedsDisplay: это метод NSView , а не NSViewController .

(Кстати, возможно, причина того, почему это работает, если вы поместите его внутрь initWithFrame: , заключается в том, что он является инициализатором NSView : я предполагаю, что когда вы перемещаете код Вы также перемещаете метод myTimerAction: , который затем имеет « self », ссылающийся правильно на представление.)

0 голосов
/ 10 февраля 2011

Поскольку он работает при использовании initWithFrame:, проблема, вероятно, заключается в том, что buttonPush: неправильно подключен. Попробуйте установить точку останова в buttonPush: посмотрите, действительно ли она вызывается при нажатии кнопки.

...