18

我正在实施应用内购买,并通过

- (void) requestProductData
{
 SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:
         [NSSet setWithObjects: featureAId,featureBId,nil]]; // add any other product here
 request.delegate = self;
 [request start];
}

响应方法

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
 [purchasableObjects addObjectsFromArray:response.products];
}

根本没有被调用。在我尝试的十次尝试中,它只有一次调用。

4

4 回答 4

47

尝试实施- (void)request:(SKRequest *)request didFailWithError:(NSError *)error方法 - 处理您的请求时可能存在一些错误。

于 2010-04-28T11:17:51.770 回答
26

我遇到了同样的问题,但在我的情况下,原因是我使用了自动引用计数并且我忘记了保留请求。

我的代码就像:

- (void) requestProductData
{
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:ProductIdentifier]];
    request.delegate = self;
    [request start];
}

但是委托的 productsRequest:didReceiveResponse: 从未被调用过。

解决方法是:

@property (strong, nonatomic) SKProductsRequest *request;

- (void) requestProductData
{
    self.request= [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:ProductIdentifier]];
    self.request.delegate = self;
    [self.request start];
    // you can nil request property in request:didFailWithError: and requestDidFinish:
}
于 2012-05-22T01:57:55.700 回答
10

我有同样的问题。我创建了一个帮助类来处理 IAP 并检查产品。我最终发现我创建的类的实例在响应返回之前被释放,因此委托方法从未被调用,因为它们不再存在。

我通过在使用 @proprty(strong, nonatomic) 调用它的类中保留辅助类的实例来解决我的问题...

如果您没有使用辅助类并将其编码到现有类中,那么上面的答案将通过保留您的 SKProductRequest 来工作。

于 2012-06-27T15:38:35.817 回答
1

我遇到了类似的问题(错误:无法连接到 iTunes Store)。将 iTunes Beta 升级到最新版本后,它又开始工作了。

于 2011-11-16T17:22:27.053 回答