作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在通过 dispatch_async 调用 storeViewController loadProductWithParameters。是否可以设置一个超时值,以便它只尝试获取 X 秒的结果然后放弃?
最佳答案
我通过使用下面的类方法而不是直接调用 loadProductWithParameters 来实现我自己的超时。由于 dispatch_after
和 __block
变量,它会超时。
+ (void)loadProductViewControllerWithTimeout:(NSTimeInterval)timeout
storeKitViewController:(SKStoreProductViewController *)storeKitViewController
parameters:(NSDictionary *)parameters
completionHandler:(void (^)(BOOL result, NSError *error))completionHandler {
__block BOOL hasReturnedOrTimedOut = NO;
[storeKitViewController loadProductWithParameters:parameters completionBlock:^(BOOL result, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (!hasReturnedOrTimedOut) {
hasReturnedOrTimedOut = YES;
if (completionHandler) completionHandler(result, error);
}
});
}];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (!hasReturnedOrTimedOut) {
hasReturnedOrTimedOut = YES;
if (completionHandler) completionHandler(NO, nil); // Or add your own error instead of |nil|.
}
});
}
我最新的应用程序更新被 Apple 拒绝,因为 loadProductWithParameters 从未调用它的 completionBlock 并阻止我的用户在 iTunes 上购买歌曲...希望这有帮助。
关于ios - 是否可以为 SKStoreProductViewController loadProductWithParameters 设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18091020/
我目前正在通过 dispatch_async 调用 storeViewController loadProductWithParameters。是否可以设置一个超时值,以便它只尝试获取 X 秒的结果然
我使用 SKStoreProductViewController,当将正确的 ID 传递给方法 loadProductWithParameters:completionBlock: 时,一切顺利,但是
我是一名优秀的程序员,十分优秀!