как сделать недействительным один nstimer мне нужно - PullRequest
0 голосов
/ 19 сентября 2011
- (void)start{
    NSTimer *mtimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scheduleSomeNSTimer:) userInfo:nil repeats:YES];
}

- (void)scheduleSomeNSTimer:(NSTimer *)timer{
    NSTimer *newtimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(showAction:) userInfo:nil repeats:NO];
}

- (void)showAction:(NSTimer *)timer{
    NSLog(@"action show!");
}

если я хочу сделать недействительным один из nstimer, который расписан по функции - (void)addSomeNSTimer:(NSTimer *)timer

приложение будет создавать newtimer повторно, поэтому, когда мне нужно сделать недействительным одно из этих newnstimer, как я могу найти нужный мне объект

например: приложение создает 4 nstimers и работает в цикле, как я могу найти один из них и сделать недействительным

Ответы [ 5 ]

2 голосов
/ 19 сентября 2011

Вы должны сохранить ссылку на таймер в вашем классе и сделать:

self.myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scheduleSomeNSTimer:) userInfo:nil repeats:YES];

поэтому, когда вы хотите сделать его недействительным, просто выполните:

[self.myTimer invalidate];

1 голос
/ 19 сентября 2011

Вы можете достичь этого ниже:

В соответствии с вашими отзывами, пожалуйста, посмотрите ниже ответ.

в .h файле, объявить в массиве:

NSMutableArray * arrTimers;

в файле .m, добавьте таймер в этот массив, где бы вы ни создавали таймер.

NSTimer *mtimer = [[NSTimer alloc] init];

mtimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scheduleSomeNSTimer:) userInfo:nil repeats:YES];

[arrTimers addObject:mtimer];

Тогда вы можете сделать его недействительным, как показано ниже:

NSTimer *myTimer = (NSTimer *)[arrTimers objectAtIndex:1];
if(myTimer != nil)
    {
        [myTimer invalidate];
        myTimer = nil;
    }

Надеюсь, это решит вашу проблему.


if(timer == mtimer)
{

   if(mtimer != nil)
   {
        [mtimer invalidate];
        mtimer = nil;
   }
}

if(timer == newtimer)
{
    if(newtimer != nil)
    {
        [newtimer invalidate];
        newtimer = nil;
    }
}

Приветствие.

1 голос
/ 19 сентября 2011

To_play - это объект NSTimer.

[To_play invalidate];
0 голосов
/ 19 декабря 2013

Вы можете сделать это без сохранения ссылки на таймер.Вместо этого используйте флаг.

@property(nonatomic, assign) BOOL invalidateTimer; 

Исходный код, связанный с таймером:

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scheduleSomeNSTimer:) userInfo:nil repeats:YES];

- (void)scheduleSomeNSTimer:(NSTimer *)timer
{
   if(YES == invalidateTimer)
   {
     if([timer isValid])
     {
       [timer invalidate];
       timer = nil;
     }
   }
}
0 голосов
/ 19 сентября 2011

Объявите NSMutableArray и в методе scheduleSomeNSTimer добавьте объект newtimer в массив. Когда вы аннулируете объект таймера в этом массиве, вам также необходимо удалить его из массива.

...