2010-03-03 5 views
1

Il s'agit plus d'un type de question de haut niveau "comment résolvez-vous ce type de problème", par opposition à une question "pourquoi mon code ne compile pas". J'ai une barre de recherche dans une application iPhone qui recherche mes données très bien. Cependant, j'ai la recherche déclenchée (handleSearchForTerm est appelée) après chaque touche. Cela crée un certain retard. J'aime l'idée d'avoir les résultats de recherche apparaître automatiquement, mais je n'aime pas que pour les ensembles de données plus volumineux, l'acte de recherche semble interrompre l'entrée de l'utilisateur.iPhone SDK - Barre de recherche Synchronisation de thread Question

Est-ce quelque chose que je ne peux pas réparer en plus de rendre ma routine de recherche plus rapide? Ou, y a-t-il une meilleure façon de gérer cela? Une idée est que je voudrais être en mesure de déclencher une recherche seulement, par exemple, 500ms après une pression sur une touche (à moins qu'il y ait eu une autre pression de touche entre temps, puis réinitialiser). Est-ce possible?

Merci pour toute aide.

Répondre

1

Vous pouvez utiliser le performSelector:withObject:afterDelay pour appeler la routine de recherche après un délai de 500ms

EDIT (après votre commentaire):

Vous pouvez utiliser cancelPreviousPerformRequestsWithTarget: selector: object: pour annuler les appels suivants à la recherche de routine

Bien sûr, vous aurez besoin d'un mécanisme pour identifier si une routine de recherche est en cours. Utilisez des sémaphores pour cela.

+0

Si plusieurs performSelectors sont appelés pour effectuer la même tâche (avec des objets différents), seul le dernier feu est-il déclenché? Ou ai-je besoin de mettre en place un mécanisme quelconque pour que seule la dernière requête soit effectuée? – Matt

+0

Veuillez vérifier la réponse modifiée –

Questions connexes