【发布时间】:2013-07-26 02:30:15
【问题描述】:
我正在尝试使用 SKStoreProductViewController 在我的应用程序中以模态方式打开 App Store。我查看了网络上的许多示例,人们这样做的方式有两种。
SKStoreProductViewController *storeController = [[SKStoreProductViewController alloc] init];
[storeController setDelegate:self];
//set product parameters
//must be a number wrapped in a string
NSDictionary *productParameters = @{ SKStoreProductParameterITunesItemIdentifier : @"36372693196"};
[storeController loadProductWithParameters:productParameters completionBlock:^(BOOL result, NSError *error) {
if (result) {
//show
[self presentViewController:storeController animated:YES completion:nil];
}else {
NSLog(@"ERROR WITH STORE CONTROLLER %@\n", error.description);
//redirect to app store
//[[UIApplication sharedApplication] openURL:[[self class] appStoreURL]];
}
}];
如果我这样做^^没有任何反应。块中的 if (result) 或 else 语句永远不会执行。
我还看到有人为完成块传递 nil,并在此之后立即以模态方式呈现视图控制器,如下所示:
SKStoreProductViewController *storeController = [[SKStoreProductViewController alloc] init];
[storeController setDelegate:self];
//set product parameters
//must be a number wrapped in a string
NSDictionary *productParameters = @{ SKStoreProductParameterITunesItemIdentifier : @"36372693196"};
[storeController loadProductWithParameters:productParameters completionBlock:nil];
[self presentViewController:storeController animated:YES completion:nil];
当我展示视图控制器时,loadProductWithParameters 块内的代码将执行。在这一点上我非常困惑..如果该块直到我展示它之后才运行,我如何检查成功或失败。
最后,我读到您应该在后台线程中执行 loadProductWithParameters。我也试过这个。第二个选项是唯一一个显示模式的选项 - 来自模拟器和设备的无法连接到 iTunes 消息。我尝试了多个应用程序 ID。到底是怎么回事?我如何让它发挥作用?
【问题讨论】:
标签: ios objective-c objective-c-blocks