Bar*_*lor 22 iphone xcode objective-c storekit in-app-purchase
为我的应用内购买运行测试(第一次在应用内购买).我在这段代码的第三行得到了EXC_BAD_ACCESS:
SKPayment *payment = [SKPayment paymentWithProduct:electronicProd];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] addPayment:payment];
Run Code Online (Sandbox Code Playgroud)
这是一个按钮的IBAction.electronicPack在标题中声明为SKProduct.在productsRequest didReceiveResponse中抛出了一些NSLog,当请求产品时(在viewDidLoad中),他们表明它正确地获取产品并将其存储在electronicPack中.在didReceiveResponse页面中将electronicPack定义为[[request.products] objectAtIndex:0].所以是的.多数民众赞成在哪里,不知道该怎么做.任何帮助表示赞赏.
更新:FIXED意外遗留在添加额外事务观察器的代码中lol
Mr.*_*. T 40
我有同样的问题,我的解决方案是打电话
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
Run Code Online (Sandbox Code Playgroud)
将应用程序商店留在我的应用程序中.也许它会在将来帮助某人.
Zor*_*ayr 26
似乎问题是在删除前一个之前尝试添加事务观察器.将以下内容添加到控制器以解决此问题:
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
imi*_*ike 12
Mr.T回答是最好的解决方案!
在swift中,我在这里调用removeTransactionObserver:
deinit {
SKPaymentQueue.defaultQueue().removeTransactionObserver(self)
}
Run Code Online (Sandbox Code Playgroud)
and*_*azz 10
您需要保留您正在创建的对象
- (void)viewDidLoad {
//... stuff
SKProduct* electronicProduct = //...
[electronicProduct retain];
//... otherstuff
}
Run Code Online (Sandbox Code Playgroud)
viewDidLoad由系统在自动释放池中包装,paymentWithProduct:返回一个autorelease对象.当viewDidLoad完成后,将释放所有自动释放对象,这就是为什么当您稍后尝试访问它时会获得错误的内存访问.
归档时间: |
|
查看次数: |
5541 次 |
最近记录: |