LAInAppHelper您链接的教程中的实现存在问题:帮助程序将您的应用程序视为非并发。
这是正在发生的事情:共享实例LAInAppHelper有一个sharedInstance,它拥有_completionHandler(除其他外)。
该requestProductsWithCompletionHandler:方法分配_completionHandler已传入块的副本。这对于第一个请求是可以的,但如果另一个请求“正在运行”,则由于此重新分配,ARC 将释放另一个请求的完成块。如果您切换到的选项卡启动并发请求,则初始请求将返回到已释放的块,从而导致未定义的行为,并可能导致崩溃。
要解决此问题,您需要将类拆分为两部分 - 一部分包含所有请求共有的项目(即_productIdentifiers和_purchasedProductIdentifiers)和特定于请求的项目(_productsRequest和_completionHandler)。
第一个类的实例(我们称它为LAInAppHelper)保持共享;第二个类的实例(我们称之为它LAInAppHelperRequest)是在方法内按请求创建的requestProductsWithCompletionHandler:。
-(id)initWithHelper:(LAInAppHelper*)helper
    andCompletionHandler:(RequestProductsCompletionHandler)completionHandler {
    if (self = [super init]) {
        _completionHandler = [completionHandler copy];
        _productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:helper.productIdentifiers]; // You will need to make productIdentifiers a property
        _productsRequest.delegate = self;
        [_productsRequest start];
    }
    return self;
}
您还需要创建一个包装 的块_completionHandler,如下所示:
- (void)requestProductsWithCompletionHandler:(RequestProductsCompletionHandler)completionHandler {
    __block LAInAppHelperRequest *req = [[LAInAppHelperRequest alloc] initWithHelper:self andCompletionHandler:^(BOOL success, NSArray *products) {
         completionHandler(success, products);
         req = nil;
    }];
}