gpt4 book ai didi

ios - 应用程序在低网络中崩溃,例如(EDGE,100%丢失)

转载 作者:行者123 更新时间:2023-12-02 03:34:24 26 4
gpt4 key购买 nike

我的应用程序实现应用内购买应用程序在连接到 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 属性,但它仍然崩溃检查下面的图像

code

enter image description here

.h file enter image description here

tutorial

从 iTunes Connect 检索产品信息的方法:

- (void)requestProductsWithCompletionHandler:(RequestProductsCompletionHandler)completionHandler {

// 1
_completionHandler = [completionHandler copy];

// 2
_productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers];
_productsRequest.delegate = self;
[_productsRequest start];

}

这首先将完成处理程序 block 的副本存储在实例变量内,以便它可以在产品请求异步完成时通知调用者。然后,它创建 SKProductsRequest 的一个新实例,这是 Apple 编写的类,其中包含从 iTunes Connect 提取信息的代码。它非常易于使用 - 您只需给它一个委托(delegate)(符合 SKProductsRequestDelegate 协议(protocol)),然后调用 start 即可运行。我们将 IAPHelper 类本身设置为委托(delegate),这意味着当产品列表完成(productsRequest:didReceiveResponse)或失败(request:didFailWithErorr)时它将收到回调。说到委托(delegate)回调,接下来添加它们!在@end之前添加以下代码:

最佳答案

当您在上面的方法中调用_completionHandler时,它很可能为nil。当变量为零时尝试执行 block 变量确实会产生错误的访问错误。

您可以通过将完成处理程序 block 的执行包装在 if 语句中并仅在变量不为零时才执行来确认这一点:

if(_completionHandler)
{
_completionHandler(YES, skProducts);
}

解决问题是另一回事,您需要跟踪调用并查看何时未传递或删除完成 block 。

关于ios - 应用程序在低网络中崩溃,例如(EDGE,100%丢失),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18051112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com