NSTimer только иногда срабатывает? - PullRequest
1 голос
/ 12 августа 2011

Я столкнулся с проблемой, когда мой таймер случайно не работает.Я могу буквально ОСТАНОВИТЬ приложение и перестроить его без изменения кода.Это работает иногда, а иногда нет?Когда я говорю «иногда», я говорю о сеансе приложения.Если он запустится, он останется запущенным.Но это не работает каждый сеанс приложения.Я вижу то же самое, когда использую оба кодовых блока ниже.

//Code1:
//I tried this block of code after reading it might be related to how I am interacting with my UIElements while the timer is running in the background.
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
syncWithServerTimer = [NSTimer timerWithTimeInterval:15 target:self selector:@selector(syncWithServer) userInfo:nil repeats:YES];
[runloop addTimer:syncWithServerTimer forMode:NSRunLoopCommonModes];
[runloop addTimer:syncWithServerTimer forMode:UITrackingRunLoopMode];

//Code2:
syncWithServerTimer = [[NSTimer scheduledTimerWithTimeInterval:15 target:self selector:@selector(syncWithServer) userInfo:nil repeats:YES] retain];

Опять же, я попробовал оба из них, и они оба работают БОЛЬШЕ времени, но не ВСЕ время.В чем может быть проблема?Я не досрочно освобождаю или аннулирую.

Ответы [ 2 ]

1 голос
/ 29 августа 2011

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

[self performSelectorOnMainThread:@selector(startTimer) withObject:nil waitUntilDone:NO];
0 голосов
/ 29 августа 2011

проблема, которую вы видите (судя по вашему ответу), в том, что таймер уничтожается с циклом выполнения . если вы запланируете / добавите таймер в цикл выполнения, цикл выполнения не будет работать, пока не будут исчерпаны все таймеры.

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

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