Nav*_*avi -1 crash networking objective-c in-app-purchase ios
我的应用程序实施应用内购买应用程序的应用程序在连接到EDGE网络时崩溃,100%丢失,网络非常差.没有崩溃日志.但它"EXC BAD ACCESS code=1 address=0xc "
在跟随线上说
_completionHandler(YES, skProducts);
Run Code Online (Sandbox Code Playgroud)
该方法的代码
#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;
}
Run Code Online (Sandbox Code Playgroud)
我正在关注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];
}
Run Code Online (Sandbox Code Playgroud)
这首先在实例变量中松散完成处理程序块的副本,以便它可以在产品请求异步完成时通知调用者.然后它创建一个SKProductsRequest的新实例,它是Apple编写的类,其中包含从iTunes Connect中提取信息的代码.它非常容易使用 - 您只需给它一个委托(符合SKProductsRequestDelegate协议),然后调用start以使事情运行.我们将IAPHelper类本身设置为委托,这意味着它将在产品列表完成(productsRequest:didReceiveResponse)或失败(request:didFailWithErorr)时收到回调.说到委托回调,请添加下一个!在@end之前添加以下代码:
很有可能_completionHandler
是nil
你在上面的方法中调用它.当变量为nil时尝试执行块变量会产生错误的访问错误.
您可以通过在if语句中包装完成处理程序块的执行来确认这一点,并且只有在变量不是nil时才执行它:
if(_completionHandler)
{
_completionHandler(YES, skProducts);
}
Run Code Online (Sandbox Code Playgroud)
解决问题是另一回事,您需要跟踪调用并查看何时未传递或删除完成块.
归档时间: |
|
查看次数: |
602 次 |
最近记录: |