8

我在我的应用程序中使用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];
        }
    }];
}
4

1 回答 1

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;

有几种方法可以处理这个问题。

于 2013-05-14T15:05:21.713 回答