productsRequest响应方法不是调用

时间:2010-04-28 11:12:24

标签: iphone cocoa in-app-purchase

我正在应用程序购买中实施我正在通过

向苹果商店发送请求
- (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 个答案:

答案 0 :(得分:42)

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

答案 1 :(得分:23)

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

我的代码就像:

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

但委托的产品请求: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:
}

答案 2 :(得分:6)

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

我通过在使用@proprty(强,非原子)调用它的类中保留helper类的实例来解决我的问题......

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

答案 3 :(得分:1)

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