2011-11-04 2 views
0

В моем viewDidLoad методе я следующее:с использованием 2 NSTimer в одних и тех же UIViewControllers

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self repeatRequest]; 
    [NSTimer scheduledTimerWithTimeInterval:30.0 target: self selector: @selector(repeatRequest) userInfo: nil repeats: YES]; 
    [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 
} 

А вот методы, которые вызываются:

- (void) repeatRequest{ 
    NSLog(@"backgroundRequest"); 
    } 

- (void) onTimer{ 
    NSLog(@"flip pages"); 
} 

Дело это все работает хорошо 2 минуты, и методы вызываются как настроенные ... но после этого все сбивается с пути, и метод onTimer получает вызов каждую секунду не один раз в пять секунд. И также часто называют repeatrequest, что он должен быть. Любой знает, какой h может быть причиной?

+0

Я думаю, проблема в вашем другом коде этого представления, потому что я проверяю его на 1 час, он отлично работает для меня. – Ron

ответ

0

Вы действительно не дали нам слишком много информации для работы, но я бы предположил, что по какой-то причине ваш метод viewDidLoad вызывается несколько раз, что приводит во многих повторяющихся таймеров, которые держат позвонив repeatRequest и onTimer методы.

Возможно, вы хотите посмотреть, почему viewDidLoad может быть вызван несколько раз. Также посмотрите here. Вы должны предположить, что viewDidLoad разрешено вызывать более одного раза.

(Чтобы проверить это, просто добавьте NSLog(@"viewdidload"); в ваш метод viewDidLoad и видя, как часто это вызывается.)

То, что вы действительно должны делать, следовательно, хранить ваши NSTimer экземпляры, как Ивар (предположим, что они называются timer1 и timer2 соответственно), а затем проверить, существуют ли они уже тогда, когда viewDidLoad называется:

if (!timer1) timer1 = [NSTimer scheduledTimerWithTimeInterval:30.0 target: self selector: @selector(repeatRequest) userInfo: nil repeats: YES]; 
if (!timer2) timer2 [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 
0

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

Вы должны сохранить ссылку на создаваемые вами таймеры в viewDidLoad, чтобы вы могли корректно аннулировать их в viewDidUnload.

+0

как их аннулировать? Код кода – adrian

+0

[таймер недействителен]; (вам нужно сохранить ссылку на таймер в ivar или property) –

Смежные вопросы