好。我在应用程序中进行应用内购买。我有一个视图控制器作为我的应用程序的存储,用户可以从中购买。
当你第一次进入商店时,你可以买到很好的东西(尽可能多的购买),但如果你退出商店然后再回到商店就会变得很有气质。有时它会控制工作,但总是最终崩溃'EXC_BAD_ACCESS'。
它在添加付款行崩溃:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
SKMutablePayment *payment = [[SKMutablePayment alloc] init];
payment.productIdentifier = @"uk.co.exampleEmail_name.MaxBuys";
[[SKPaymentQueue defaultQueue] addPayment:payment];
但有时也在main.m文件中:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
另一个类似的问题是因为它有其他代码添加了多个事务观察者,但这是我称之为的唯一地方。但当然,每次购买尝试都会调用一次。我在视图中加载了productsrquest委托命令。
任何帮助将不胜感激。
答案 0 :(得分:4)
错误消息表示正在将消息发送到InAppPurchaseManager的解除分配实例,这是您的类。在打开视图(创建实例),关闭视图(释放实例),然后再次打开视图(创建第二个实例)之后,就会发生这种情况。问题发生在addPayment:call中。这表明框架仍然处理旧的已发布实例,并尝试向其发送消息。
当您调用
时,您可以在loadStore中为框架提供对象的句柄 [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
我没有看到你将自己作为观察者移除的任何地方。发送通知的对象通常不会保留其观察者,因为这样做会导致保留周期和/或内存泄漏。
在 dealloc 代码中,您需要清理并调用 removeTransactionObserver :.这应该可以解决你的问题。
- (void)dealloc {
[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];
[super dealloc];
}