我正在製作一個iphone應用程序,並安排了一個名爲gameOver的事件,在15秒後(遊戲結束時)發生。如何在Objective-C中取消以前計劃的事件?
[self performSelector:@selector(gameOver) withObject:nil afterDelay:15.0];
我怎樣才能取消預定此事件,因此如果有人想按復位按鈕並重新開始遊戲,這個計劃的事件將被刪除,另外一個將被創建。
我正在製作一個iphone應用程序,並安排了一個名爲gameOver的事件,在15秒後(遊戲結束時)發生。如何在Objective-C中取消以前計劃的事件?
[self performSelector:@selector(gameOver) withObject:nil afterDelay:15.0];
我怎樣才能取消預定此事件,因此如果有人想按復位按鈕並重新開始遊戲,這個計劃的事件將被刪除,另外一個將被創建。
嘗試
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget
aTarget將要進行的選擇對象。自己在你的例子中。
編輯: 此方法被限定在NSObject的這樣:
[NSObject cancelPreviousPerformRequestsWithTarget:myObject]
將是語法。
編輯2: 使用
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument
只取消調度調用這個特定的選擇。
我會用一個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;
}
對象傳遞給'withObject:'參數將被傳遞到所討論的選擇單個參數;這不是目標。 OP案例中的目標是「自我」。如果OP想要取消這個,他們可以只是[[self class] cancelPreviousPerformRequestsWithTarget:self]'。 –
你說得對,謝謝。 – huesforalice