/ / SVProgressHUD con query findObjectsInBackgroundWithBlock? - parse.com, hud, svprogresshud

SVProgressHUD con query findObjectsInBackgroundWithBlock? - parse.com, hud, svprogresshud

Vorrei fare un SVProgressHUD con un'analisi domanda findObjectsInBackgroundWithBlock. Quando provo, l'hud sta lasciando 1 secondo dopo la visualizzazione della vista.

Come posso fare che il hud rimani fino alla fine della query (so che è una query in background ...): /

Che cosa sto facendo di sbagliato ?

Qualche idea ?

Ecco il mio codice:

-(void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeGradient];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// time-consuming task
[self loadShop];
dispatch_async(dispatch_get_main_queue(), ^{
[SVProgressHUD dismiss];
});
});
}

e metodo:

-(void)loadShop {
//    Configure Shop with Parse DB
PFQuery *presentationText = [PFQuery queryWithClassName:@"presentationText"];
[presentationText findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
self.presentationText.text = [[objects valueForKey:@"Text" ] objectAtIndex:0];
}}];

PFQuery *categoryQuery = [PFQuery queryWithClassName:@"Category"];
[categoryQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
self.categoryLabel.text = [[objects valueForKey:@"Text" ] objectAtIndex:0];
self.categoryLabel2.text = [[objects valueForKey:@"Text" ] objectAtIndex:1];
}}];

PFQuery *descriptionLabel = [PFQuery queryWithClassName:@"descriptionLabel"];
[descriptionLabel findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
self.descriptionLabel.text = [[objects valueForKey:@"Text" ] objectAtIndex:3];
self.descriptionLabel2.text = [[objects valueForKey:@"Text" ] objectAtIndex:0];
self.descriptionLabel3.text = [[objects valueForKey:@"Text" ] objectAtIndex:1];
self.descriptionLabel4.text = [[objects valueForKey:@"Text" ] objectAtIndex:2];
}}];

PFQuery *priceLabel = [PFQuery queryWithClassName:@"priceLabel"];
[priceLabel findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
self.priceLabel.text = [[objects valueForKey:@"Text" ] objectAtIndex:0];
self.priceLabel2.text = [[objects valueForKey:@"Text" ] objectAtIndex:1];
self.priceLabel3.text = [[objects valueForKey:@"Text" ] objectAtIndex:2];
self.priceLabel4.text = [[objects valueForKey:@"Text" ] objectAtIndex:3];
}}];


PFQuery *urlImage = [PFQuery queryWithClassName:@"urlImage"];
[urlImage findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
self.imageButtonURL = [[objects valueForKey:@"URL" ] objectAtIndex:0];
self.imageButtonURL2 = [[objects valueForKey:@"URL" ] objectAtIndex:1];
self.imageButtonURL3 = [[objects valueForKey:@"URL" ] objectAtIndex:2];
self.imageButtonURL4 = [[objects valueForKey:@"URL" ] objectAtIndex:3];
imageButtonData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:self.imageButtonURL]];
self.imageButton.imageView.image = [UIImage imageWithData: imageButtonData];

imageButtonData2 = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:self.imageButtonURL2]];
self.imageButton2.imageView.image = [UIImage imageWithData: imageButtonData2];

imageButtonData3 = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:self.imageButtonURL3]];
self.imageButton3.imageView.image = [UIImage imageWithData: imageButtonData3];

imageButtonData4 = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:self.imageButtonURL4]];
self.imageButton4.imageView.image = [UIImage imageWithData: imageButtonData4];
}}];
}

risposte:

1 per risposta № 1

stai usando Blocks da parse. Avvia SVProgressHUD prima di recuperare oggetti. Smettila quando è finita.

esempio:

 PFQuery *priceLabel = [PFQuery queryWithClassName:@"priceLabel"];
//SVProgressHUD starts
[priceLabel findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
self.priceLabel.text = [[objects valueForKey:@"Text" ] objectAtIndex:0];
self.priceLabel2.text = [[objects valueForKey:@"Text" ] objectAtIndex:1];
self.priceLabel3.text = [[objects valueForKey:@"Text" ] objectAtIndex:2];
self.priceLabel4.text = [[objects valueForKey:@"Text" ] objectAtIndex:3];
//SVProgressHUD stops
}}];

Quindi potresti avviarlo quando apparirà la vista e fermarlo dopo l'ultima richiesta fatta.