2013-05-14 24 views
5

Io uso nella mia app il SKStoreProductViewController. Si presenta correttamente, ma con alcuni secondi di ritardo, che rallenta l'esperienza dell'utente.SKStoreProductViewController che mostra con ritardo

C'è qualcosa di sbagliato nel mio codice? O dovrei informare l'utente che il VC sta caricando? Perché in questo momento si può credere che non stia succedendo niente dopo aver premuto il tasto (che fa scattare il seguente codice):

-(void)launchApp:(id)sender { 

    // Recall on main thread if necessary 
    if (![NSThread isMainThread]) { 
     [self performSelectorOnMainThread:@selector(launchApp:) 
           withObject:sender 
          waitUntilDone:NO]; 
     return; 
    } 

    // Initialize Product View Controller 
    SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init]; 

    // Configure View Controller 
    [storeProductViewController setDelegate:self]; 
    [storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @"*********"} 
              completionBlock:^(BOOL result, NSError *error) { 
     if (error) { 
      NSLog(@"Error %@ with User Info %@.", error, [error userInfo]); 
     } else { 
      // Present Store Product View Controller 
      [self presentViewController:storeProductViewController animated:YES completion:nil]; 
     } 
    }]; 
} 

risposta

27

Il ritardo è causato perché l'utente è in viewController dopo che i prodotti sono stati caricati sucesfully.

È possibile effettuare la chiamata presentViewController:animated:completion: al di fuori del blocco che viene chiamato dopo che i prodotti sono stati caricati. In questo caso il controller verrà presentato vuoto e verrà riempito dopo che i prodotti sono stati caricati.

qualcosa del genere:

SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init]; 

// Configure View Controller 
[storeProductViewController setDelegate:self]; 
[storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @364709193} 
             completionBlock:^(BOOL result, NSError *error) { 
    if (error) { 
     NSLog(@"Error %@ with User Info %@.", error, [error userInfo]); 
    } else { 

    } 
}]; 
// Present Store Product View Controller 
[self presentViewController:storeProductViewController animated:YES completion:nil]; 

Oppure si potrebbe creare una vista "pop-up", che mostra un indicatore di attività mentre il controllore carica il suo contenuto.

O si utilizza [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

ci sono un paio di modi per gestire questo.

+0

Grazie, ho dimenticato per un secondo la logica dietro i blocchi .. Ho usato la prima soluzione e va bene, in quanto il VC ha la sua etichetta "caricamento". Grazie ! – rdurand

+0

@Matthias - qualche idea se è possibile stabilire un timeout per la chiamata loadProductWithParameters? – runamok

+1

Una nota: Apple dice che dovresti passare l'identificatore del tuo negozio come NSNumber anziché come NSString. – Zack

Problemi correlati