为我的应用程序购买运行测试(第一次在应用程序购买)。我在这段代码的第三行得到EXC_BAD_ACCESS:
SKPayment *payment = [SKPayment paymentWithProduct:electronicProd]; [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue] addPayment:payment];
这是一个按钮的IBAction。电子邮箱在标题中声明为SKProduct。在productsRequest didReceiveResponse中提供了一些NSLogs,当请求产品(在viewDidLoad中)时,它们显示正确地获取产品并将其存储在electronicPack中。在didReceiveResponse页面中定义为[[request.products] objectAtIndex:0]的电子邮件。那么是啊这些在哪里,不知道该怎么办任何帮助是赞赏。
更新:FIXED意外地留下了在添加一个额外的事务观察者哈哈的代码
解决方法
您需要保留您正在创建的对象
- (void)viewDidLoad { //... stuff SKProduct* electronicProduct = //... [electronicProduct retain]; //... otherstuff }
viewDidLoad被系统包装在自动释放池中,paymentWithProduct:返回一个自动释放对象。当viewDidLoad完成后,所有的autorelease对象都被释放,这就是为什么当你尝试访问它时,你的内存访问不佳。