Bar*_*lor 11 iphone xcode objective-c in-app-purchase
我有一个UITableView
不同的应用程序购买设置.每个选项都会将您带到一个视图控制器,该视图控制器也有代理人以及应用程序内购买的内容.更改plist文件以确定选择表视图中的哪个选项.一切正常.我放入NSLogs以确保变量已设置.然而,当我点击购买时,它只能工作一半的时间,另一半我得到
EXC_BAD_ACCESS
在线上:
[[SKPaymentQueue defaultQueue] addPayment:payment];
Run Code Online (Sandbox Code Playgroud)
在应用程序购买过程中,所有内容都设置正确,因为在我切换到这种方式之前它曾经工作过.我认为它可能与调用productsRequest有关,因为我NSLog
在didReceiveResponse
委托中设置并且它在第一次之后更快地收到响应.我卡住了.不工作的那些总是随机的,没有押韵或理由.任何帮助表示赞赏.
ben*_*ioT 11
我遇到了这个问题,发现问题是我发布了我添加到默认SKPaymentQueue的事务观察器.显然,SKPaymentQueue不会保留其观察员,可能是为了防止保留周期.
所以,具体来说,我改变了这段代码:
- (void) setupAppStoreObserver {
AppStoreObserver *appStoreObserver = [[AppStoreObserver alloc] init];
[[SKPaymentQueue defaultQueue] addTransactionObserver:appStoreObserver];
[appStoreObserver release]; // This is the problem
}
Run Code Online (Sandbox Code Playgroud)
对此:
- (void) setupAppStoreObserver {
AppStoreObserver *appStoreObserver = [[AppStoreObserver alloc] init];
[[SKPaymentQueue defaultQueue] addTransactionObserver:appStoreObserver];
// Note, we don't release the appStoreObserver because it is not
// actually retained by SKPaymentQueue (probably to prevent retain cycles)
}
Run Code Online (Sandbox Code Playgroud)
Mil*_*0R3 10
你需要删除观察者:
- (void)viewDidDisappear:(BOOL)animated {
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
}
Run Code Online (Sandbox Code Playgroud)
查找 NSZombieEnabled ,它将把任何被释放的东西放入一个对象中,该对象将在何时何人调用它时记录一条消息。这对于追踪这些类型的 EXC_BAD_ACCESS 问题非常有用。
归档时间: |
|
查看次数: |
3042 次 |
最近记录: |