1

Chaque fois que quelqu'un touche une ligne à l'intérieur d'UITableView, je lance une série de NSURLConnections asynchrones, qui téléchargent des données, puis analysent et enregistrons ces données dans les données de base. Le problème est que lorsque je fais cela, l'interface utilisateur est réactive pendant le téléchargement des données, mais dès que l'analyse et l'enregistrement commence, l'interface utilisateur devient non-réactif. Le NSURLConnection est enveloppé dans une classe, qui implémente le protocole NSURLConnection, et lorsque le NSURLConnection est déclenché didLoadResource, il lance une classe DataAdapter qui gère l'analyse et l'enregistrement. Je pense que c'est la cause de mon blocage de l'interface utilisateur.Interface de blocage des données de base après asynchrone NSURLConnection didLoadResource sur iPhone

Est-ce que quelqu'un a traité cela auparavant? Quelles sont mes options? Mettez le DataAdapter dans une NSOperation?

Répondre

3

Par défaut, les données de base fonctionnent sur le thread principal qui est le même thread utilisé par l'interface utilisateur. Vous devez soit créer un contexte séparé dans un autre thread, soit (plus facile) attendre que la charge descendante soit terminée avant de déplacer l'information dans les données de base. À l'heure actuelle, Core Data gèle le thread principal et l'interface pendant qu'il attend le téléchargement de certaines données.

Voir Multithreading with Core Data.

+0

Les données de base devraient attendre jusqu'à ce que les données soient téléchargées. Le DataAdapter ne commence pas l'analyse et l'enregistrement jusqu'à la méthode déléguée NSURLConnection de - (void) connectionDidFinishLoading: la connexion (NSURLConnection *) est appelée. – Bryan