Как отменить ранее запланированное событие в Objective-C? - PullRequest
0 голосов
/ 17 октября 2011

Я создаю приложение для iphone и запланировал событие под названием gameOver через 15 секунд (когда игра окончена).

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

Как можно отменить это событие, чтобы, если кто-то захочетнажмите кнопку сброса и начните игру заново, это запланированное событие будет удалено, а другое будет создано.

Ответы [ 2 ]

4 голосов
/ 17 октября 2011

Я бы использовал NSTimer

с retain -свойством 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;
}
2 голосов
/ 17 октября 2011

Попробуйте

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget

aTarget будет объектом, на котором должен выполняться селектор.self в вашем примере.

Редактировать: Этот метод определен в NSObject, поэтому синтаксисом будет

[NSObject cancelPreviousPerformRequestsWithTarget:myObject]

.

Редактировать 2: Использовать

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

только для внеплановых звонков на этот конкретный селектор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...