2013-05-14 89 views
5

我在我的應用程序中使用SKStoreProductViewController。它顯示正確,但延遲幾秒,這會減慢用戶體驗。SKStoreProductViewController延遲顯示

我的代碼有什麼問題嗎?或者我應該通知用戶VC正在加載?因爲現在人們可以相信,沒有什麼是按下按鈕(觸發下面的代碼)後發生的事情:因爲你呈現的viewController產品已sucesfully加載之後

-(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]; 
     } 
    }]; 
} 

回答

27

的延遲造成的。

您可以將產品加載後調用的塊的外部呼叫presentViewController:animated:completion:。在這種情況下,控制器將顯示爲空,並在產品加載完成後填充。

類似的規定:

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]; 

或者你可以創建一個「彈出」視圖,顯示了活動的指標,而控制器加載其內容。

或者你用[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

有一對夫婦的方式來處理這個問題。

+0

謝謝,我忘了塊的邏輯..我用第一個解決方案,它很好,因爲VC有自己的「加載」標籤。謝謝 ! – rdurand 2013-05-14 15:25:56

+0

@Matthias - 任何想法是否可以爲loadProductWithParameters調用創建超時? – runamok 2013-08-06 21:32:52

+1

One note - Apple說你應該把你的商店標識符作爲NSNumber而不是NSString。 – Zack 2014-06-13 19:44:14