【发布时间】:2011-02-18 16:49:08
【问题描述】:
遇到特定于 iOS 4.0 的 SKProductsRequest 问题。有问题的代码:
- (void)requestProductData
{
NSSet *productIdentifiers = [NSSet setWithObjects:kLimitedDaysUpgradeProductId, kUnlimitedUpgradeProductId, nil];
self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
self.productsRequest.delegate = self;
[self.productsRequest start];
}
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSLog(@"didReceiveResponse");
}
当调用 [SKProductsRequest start] 时, productsRequest:didReceiveResponse: 委托方法永远不会被调用;此外,整个应用程序挂起并且对输入完全没有响应。显然,这对我们的 iOS 4.0 用户来说是个大问题,因为它不仅会破坏支付,还会让应用完全无法使用。
需要注意的其他一些事项:这只发生在 iOS 4.0 上; iOS 4.2、3.x 都很好。另外:如果委托未在 SKProductsRequest 上设置(即注释掉“self.productsRequest.delegate = self;”行),应用程序不会挂起(但当然在这种情况下我们无法获取产品信息)。此外,从 productsRequest:didReceiveResponse: 回调中剥离的所有内容仍然会重现问题(该方法实际上从未被调用)。最后,如果 productIdentifiers NSSet 对象初始化为空集,则不会发生挂起。
有其他人经历过吗?关于这里可能发生的事情以及我们如何解决这个问题的任何想法/想法?
【问题讨论】:
-
注意:这原来是我们实现的一个类别的问题,它覆盖了一个 NSString 方法并导致它在被较低级别的应用内 SDK 调用时在无限循环中运行。因此,这里没有与 SDK 相关的一般问题。经验教训:不要覆盖核心 Cocoa 方法!
标签: iphone ios4 in-app-purchase