Question

J'ai une application UITabBar avec deux points de vue que la charge de grandes quantités de données à partir du Web dans leurs méthodes « viewWillAppear ». Je veux montrer une barre de progression ou d'un indicateur d'activité alors que ces données sont en cours de récupération, pour vous assurer que l'utilisateur connaît l'application n'est pas gelé.

Je suis conscient du fait que cela a été demandé avant. Je dois simplement des éclaircissements sur ce qui semble être un peu bonne solution .

J'ai implimented le code dans l'exemple. plus tard résolu leur problème, d'origine de la asker question en mettant la récupération des données dans un autre « fil ». Je comprends le concept de fils, mais je ne sais pas comment j'impliment cela.

Avec la recherche, j'ai trouvé que je dois passer toute ma récupération de données lourdes dans un fil d'arrière-plan, comme toute la mise à jour de l'interface utilisateur se produit dans le thread principal.

Si l'on serait obligeance de fournir un exemple pour moi, je serais très reconnaissant. Je peux fournir des pièces de mon code existant si nécessaire.

Était-ce utile?

La solution

Si vous utilisez NSURLConnection il fonctionne sur un autre thread automatiquement.

dans votre viewDidLoad:

NSURLRequest *req = [NSURLRequest requestWithURL:theURL];
NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];

alors vous avez besoin des méthodes personnalisées. Si vous tapez -connection et appuyez sur Echap, vous verrez toutes les différentes méthodes que vous pouvez utiliser. Il y a trois, vous aurez besoin de ceci:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // this is called when there is a response
        // if you're collecting data init your NSMutableData here
}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // each time the connection downloads a 
        // packet of data it gets send here
        // so you can do [myData appendData:data];
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
        // the connection has finished so you can 
        // do what you want with the data here
}

C'est fondamentalement tout ce qu'il ya à faire. poignées NSURLConnection tout le multithreading lui-même et vous n'avez pas à vous inquiéter. Maintenant, vous pouvez créer un indicateur d'activité et l'afficher et cela fonctionnera parce que le thread principal est vide. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top