2011-10-16 52 views
0

我正在製作一個iphone應用程序,並安排了一個名爲gameOver的事件,在15秒後(遊戲結束時)發生。如何在Objective-C中取消以前計劃的事件?

[self performSelector:@selector(gameOver) withObject:nil afterDelay:15.0]; 

我怎樣才能取消預定此事件,因此如果有人想按復位按鈕並重新開始遊戲,這個計劃的事件將被刪除,另外一個將被創建。

回答

2

嘗試

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget 

aTarget將要進行的選擇對象。自己在你的例子中。

編輯: 此方法被限定在NSObject的這樣:

[NSObject cancelPreviousPerformRequestsWithTarget:myObject] 

將是語法。

編輯2: 使用

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument 

只取消調度調用這個特定的選擇。

+2

對象傳遞給'withObject:'參數將被傳遞到所討論的選擇單個參數;這不是目標。 OP案例中的目標是「自我」。如果OP想要取消這個,他們可以只是[[self class] cancelPreviousPerformRequestsWithTarget:self]'。 –

+0

你說得對,謝謝。 – huesforalice

4

我會用一個NSTimer

retain -property NSTimer *myTimer

-(void) startTimer 
{ 
    self.myTimer = [NSTimer scheduledTimerWithTimeInterval:myDelay target:self selector:@selector(myTimerExpiredMethod:) userInfo:nil repeats:NO]; 
} 
-(void) myTimerExpiredMethod:(id)aSender 
{ 
    NSLog(@"timer expired"); 
    self.myTimer = nil; 
} 
-(void) cancelTimer 
{ 
    [self.myTimer invalidate]; 
    self.myTimer = nil; 
}