SKStoreProductViewController显示延迟

时间:2013-05-14 14:53:03

标签: ios storekit

我在我的应用中使用SKStoreProductViewController。它显示正确,但有几秒的延迟,这会降低用户体验。

我的代码中有什么问题吗?或者我应该通知用户VC正在加载?因为现在人们可以相信按下按钮后没有发生任何事情(触发以下代码):

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

1 个答案:

答案 0 :(得分:33)

延迟是因为您在产品加载后提供了viewController。

您可以将调用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;

有几种方法可以解决这个问题。