как аннулировать один ntimer, который мне нужен

- (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!");
}

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

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

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


person Garen    schedule 19.09.2011    source источник
comment
используйте [Yourtimeobject недействителен];   -  person Narayana    schedule 19.09.2011
comment
я просто знаю все настройки ntimer по имени newtimer, как я могу аннулировать один из них?   -  person Garen    schedule 19.09.2011


Ответы (5)


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

Согласно вашему отзыву, пожалуйста, ознакомьтесь с ответом ниже.

в файле .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;
    }
}

Ваше здоровье.

person Nishant B    schedule 19.09.2011
comment
спасибо за ваш ответ ... но я просто хочу аннулировать один из новых таймеров, которые я создаю с помощью - (void) scheduleSomeNSTimer: (NSTimer *) timer, я не хочу аннулировать все nstimer, как я могу это сделать? - person Garen; 19.09.2011
comment
Затем вы можете объявить объект Timer в файле .h. Затем используйте этот объект в методе scheduleSomeNSTimer и просто аннулируйте этот объект. - person Nishant B; 19.09.2011
comment
о... я действительно хочу запланировать еще одну задачу ntimer, их количество неизвестно... - person Garen; 19.09.2011
comment
о ... Я понял вашу точку зрения. Я редактирую свой ответ через несколько минут. Я надеюсь, что это будет полезно для вас. - person Nishant B; 19.09.2011
comment
один вопрос об ответе, если приложение выйдет, а не войдет в фон, массив и таймеры будут выпущены, должен ли я написать функцию, когда приложение завершило запуск, таймеры должны вызывать, пока мои локальные уведомления были сожжены - person Garen; 20.09.2011
comment
Привет да. тогда вам придется повторно инициализировать все данные. Вы можете сохранить данные в NSUserDefault, а затем получить данные из него и снова вызвать вызов таймера. - person Nishant B; 20.09.2011
comment
о.. это отличная идея, я должен написать действие в – applicationWillTerminate: ? - person Garen; 20.09.2011
comment
Вы можете сделать следующее: (1) когда приложение завершится, добавьте данные в NSUserDefault и (2) когда приложение запустится, получите данные из NSUserDefault и выполните процесс. Ваше здоровье - person Nishant B; 20.09.2011

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

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

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

[self.myTimer invalidate];

person Fran Sevillano    schedule 19.09.2011
comment
вы должны сделать [myTimer release]; в методе dealloc вашего класса, чтобы убедиться, что он будет выпущен. - person Fran Sevillano; 19.09.2011
comment
какую-то функцию я должен запустить даже при перезапуске приложения - person Garen; 19.09.2011

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

[To_play invalidate];
person Ron    schedule 19.09.2011

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

person user523234    schedule 19.09.2011

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

@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;
     }
   }
}
person Shamsudheen TK    schedule 19.12.2013