2011-08-13 1 views
1

Je ne peux pas trouver une réponse appropriée sur SO ou google.NSTimer sur un fil séparé de sorte qu'il ne lie pas les éléments de l'interface utilisateur

Je suis sur un serveur Web pour de nouvelles données toutes les 15 secondes. Le problème est qu'en attendant une réponse du serveur (quelques secondes à la fois) mon interface utilisateur est bloquée. Je n'arrive pas à comprendre comment démarrer un NSTimer sur un thread séparé afin que je puisse tirer de nouvelles données en arrière-plan, laissant mes boutons d'interface utilisateur sensibles.

Des suggestions?

Merci!

Répondre

5

Lorsque vous demandez au serveur, vous pouvez utiliser un NSURLRequest asynchrone pour recevoir les données. Ensuite, vous pouvez conserver votre NSTimer dans le thread principal, car tout ce qu'il ferait serait de créer un NSURLRequest asynchrone toutes les 15 secondes. Sinon, vous pouvez créer un NSTimer dans le thread d'arrière-plan en créant la minuterie avec

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

Ensuite, ajoutez la minuterie à tout boucle terme que vous voulez en appelant

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

(Remplacer currentRunLoop avec la boucle d'exécution qui vous voulez que le NSTimer soit.)

+0

Excellent! Il m'a fallu une heure pour passer mon code aux nouvelles méthodes, mais cela fonctionne comme un charme. Merci pour le conseil. – Louie

Questions connexes