Просто интересно, в каком классе находится этот код? Я бы предположил, что действие buttonPush: находится внутри контроллера, правильно?
Если это так, то вы должны иметь:
-(void)myTimerAction:(NSTimer *) timer
{
[[self view] setNeedsDisplay:YES];
}
потому что setNeedsDisplay: это метод NSView , а не NSViewController .
(Кстати, возможно, причина того, почему это работает, если вы поместите его внутрь initWithFrame: , заключается в том, что он является инициализатором NSView : я предполагаю, что когда вы перемещаете код Вы также перемещаете метод myTimerAction: , который затем имеет « self », ссылающийся правильно на представление.)