2011-07-25 36 views
2

我正在爲用戶按空間(或返回)來調用函數的OSX的Obj-C應用程序。然而,有時在用戶按空格鍵幾次之後程序認爲用戶仍在按空間,因此它會調用函數數千次直到崩潰。我放了一段時間,所以空間只能每2秒按一次,但這隻會減緩崩潰。停止崩潰的唯一方法是讓用戶再次按空格。空間按下Obj-C中的錯誤?

我該如何解決這個問題?

int key = ([[incomingEvent charactersIgnoringModifiers] UTF8String])[0]; 
key = [incomingEvent keyCode]; 
switch(key) 
{ 
    // return and space 
    case 36: 
    case 49: 

     if (CFAbsoluteTimeGetCurrent() - lastSpaceTime > acceptableTimeBetweenSpace) 
     { 
      // do stuff 
      printf("space pressed"); 

      // lastSpaceTime is now 
      lastSpaceTime = CFAbsoluteTimeGetCurrent(); 
     } 
     else 
     { 
      printf("not enough time since last space!"); 
      // break; 
      // return incomingEvent; 
     } 
     break; 

    case 53: 

     //do stuff 
     break; 
} 

我嘗試添加這樣的:在else塊

CGEventRef simulateSpaceUp, simulateSpaceDown; 

             simulateSpaceDown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)49, true); 
             simulateSpaceUp = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)49, false); 

。我在這裏做錯了什麼?

+2

你爲什麼要分配'鍵'這樣的兩次? –

+0

對不起,在我切出這些事件之前,還有很多其他案件事件,第一條關鍵線路來自更早。對不起,缺乏清晰度:) – Sciguy77

+0

你能解釋一下你是如何確定問題出現在這些問題上的嗎?你確定它不在你切除的位中嗎? –

回答

0

好像識別空格鍵不是這裏的問題。 這似乎很可能是你的延遲時間被調整到大量的時間(或負)。

爲什麼不使用NSTimer來關閉空格鍵的方法?你只需設置一個布爾道具(canNotReactToSpaceBar)爲true,在定時器運行後,當定時器用完時將其設置爲false。用布爾ü只是關閉特定的方法,當布爾設置爲真,等等。