我的应用程序实现应用内购买应用程序在连接到 EDGE 网络时崩溃,100% 丢失,网络非常差。没有崩溃日志。但它 "EXC BAD ACCESS code=1 address=0xc "
在下一行说
_completionHandler(YES, skProducts);
方法代码
#pragma mark - SKProductsRequestDelegate
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
sharedManager=[Mymanager sharedManager];
_productsRequest = nil;
sharedManager.bookidList=[[NSMutableArray alloc]init];
sharedManager.sharedProductPrice=[[NSMutableArray alloc]init];
NSArray * skProducts = response.products;
NSLog(@"sk product %@",skProducts);
// NSMutableArray *a=[[NSMutableArray alloc]init];
for (SKProduct * skProduct in skProducts) {
[sharedManager.sharedProductPrice addObject:skProduct.price];
[sharedManager.bookidList addObject:skProduct.productIdentifier];
}
[self updatePlist];
_completionHandler(YES, skProducts); //EXC BAD ACCESS CODE =1 ADDRESS=0XC
_completionHandler = nil;
}
我正在关注 Ray Wenderlich 网站上的应用内购买教程(适用于 iOS6.0)。我的应用程序的最低目标是 iOS5。任何指示如何解决此崩溃?
编辑
新的变化,我将 NSArray 设置为强大的 ARC 属性,它仍然会在下面的图片中崩溃检查
从 iTunes Connect 检索产品信息的方法:
- (void)requestProductsWithCompletionHandler:(RequestProductsCompletionHandler)completionHandler {
// 1
_completionHandler = [completionHandler copy];
// 2
_productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers];
_productsRequest.delegate = self;
[_productsRequest start];
}
这首先将完成处理程序块的副本存储在实例变量中,以便它可以在产品请求异步完成时通知调用者。然后它创建一个新的 SKProductsRequest 实例,这是 Apple 编写的类,其中包含从 iTunes Connect 中提取信息的代码。它非常易于使用——您只需给它一个委托(符合 SKProductsRequestDelegate 协议),然后调用 start 让事情运行。我们将 IAPHelper 类本身设置为委托,这意味着它会在产品列表完成(productsRequest:didReceiveResponse)或失败(request:didFailWithErorr)时收到回调。说到委托回调,接下来添加它们!在@end 之前添加以下代码: