Ios 应用内购买-有时应用程序崩溃

Ios 应用内购买-有时应用程序崩溃,ios,in-app-purchase,in-app,Ios,In App Purchase,In App,我已经上网查了好几天了,找不到解决问题的办法。我创建了一个应用程序,希望您通过应用程序内购买删除广告。我的问题是,当我点击“BuyProduct”按钮时,应用程序有时会崩溃。然后,我在[[SKPaymentQueue defaultQueue]addPayment:payment]行之后得到错误消息“Thread 1:EXC_BAD_ACCESS(code=1,address=0x16e6f6980)” 这里是我购买的DViewController的.h: ​#import <UIKit/

我已经上网查了好几天了,找不到解决问题的办法。我创建了一个应用程序,希望您通过应用程序内购买删除广告。我的问题是,当我点击“BuyProduct”按钮时,应用程序有时会崩溃。然后,我在
[[SKPaymentQueue defaultQueue]addPayment:payment]行之后得到错误消息“Thread 1:EXC_BAD_ACCESS(code=1,address=0x16e6f6980)”

这里是我购买的DViewController的.h:

​#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>
@interface PurchasedViewController2 : UIViewController <SKPaymentTransactionObserver, SKProductsRequestDelegate>{
NSTimer *myTimer;
int countdown;
}
@property (strong, nonatomic) SKProduct *product;
@property (strong, nonatomic) NSString *productID;
@property (strong, nonatomic) IBOutlet UILabel *productTitle;
@property (strong, nonatomic) IBOutlet UITextView *productDescription;
@property (strong, nonatomic) IBOutlet UIButton *buyButton;
@property (weak, nonatomic) IBOutlet UIButton *goBack;
@property (weak, nonatomic) IBOutlet UILabel *labelGray;
@property (weak, nonatomic) IBOutlet UILabel *labelCountdown;
- (IBAction)GoBack:(id)sender;
- (IBAction)BuyProduct:(id)sender;
- (IBAction)Restore:(id)sender;
-(void)getProductID:(UIViewController *)viewController;
-(void)UnlockPurchase;
-(void)update;
@end

非常感谢您,munch

看起来您在按下BuyProduct按钮和创建产品之间存在竞争条件。通常,在允许用户点击BuyProduct之前,您应该完成SKProductsRequest。也就是说,当按下BuyProduct时,您知道产品具有您想要的值吗?

Thx我解决它。我将GoBack方法更改为:

- (IBAction)GoBack:(id)sender {
[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];
[self dismissViewControllerAnimated:YES completion:NULL];

}

我做了一点改变,但它不起作用:(
-(iAction)BuyProduct:(id)发送者{NSLog(@“buyPoduct按钮按下”);如果(self.product!=nil){SKPayment*付款=[SKPayment paymentWithProduct:_product];[[SKPaymentQueue defaultQueue]addTransactionObserver:self];[SKPaymentQueue defaultQueue]addPayment:payment];}}
​- (IBAction)PurchaseItem:(id)sender {
_purchaseController = [[PurchasedViewController2 alloc] initWithNibName:nil bundle:nil];
_purchaseController.productID =@"PS.PileUp.RemoveAds";
[[SKPaymentQueue defaultQueue] addTransactionObserver:_purchaseController];
[self presentViewController:_purchaseController animated:YES completion:NULL];
[_purchaseController getProductID:self];
}
- (IBAction)GoBack:(id)sender {
[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];
[self dismissViewControllerAnimated:YES completion:NULL];