NSTimer в отдельном потоке, поэтому он не связывает элементы интерфейса - PullRequest
1 голос
/ 13 августа 2011

Не могу найти подходящий ответ на SO или Google.

Я загружаю веб-сервер для новых данных каждые 15 секунд. Проблема заключается в ожидании ответа от сервера (по несколько секунд), мой пользовательский интерфейс связан. Кажется, я не могу понять, как запустить NSTimer в отдельном потоке, чтобы я мог извлекать новые данные в фоновом режиме, оставляя свои кнопки пользовательского интерфейса отзывчивыми.

Есть предложения?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 13 августа 2011

Когда вы запрашиваете с сервера, вы можете использовать асинхронный NSURLRequest для получения данных.Затем вы можете оставить свой NSTimer в главном потоке, потому что все, что он будет делать, - это создавать асинхронный NSURLRequest каждые 15 секунд.В противном случае вы можете создать NSTimer в фоновом потоке, создав таймер с помощью

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats

Затем добавьте таймер в любой цикл выполнения, который вы хотите, вызвав

[[NSRunLoop currentRunLoop] addTimer:MY_TIMER forMode:NSDefaultRunLoopMode];

(замените currentRunLoopзапустите цикл, в который вы хотите включить NSTimer.)

0 голосов
/ 13 августа 2011

Существуют различные способы работы с потоками, но GCD (Grand Central Dispatch), вероятно, самый простой.

Вот учебный пример построение простой очереди заданий в GCD .

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