gpt4 book ai didi

crash - EXC_BAD_ACES 购买应用内购买时,仅在第二次进入商店后

转载 作者:行者123 更新时间:2023-12-03 16:21:12 25 4
gpt4 key购买 nike

好的。我的应用程序中有应用内购买。我有一个 View Controller ,它充当我的应用程序的商店,用户可以从中购买东西。

第一次进入商店时,您可以很好地购买东西(想买多少就买多少),但是如果您退出商店,然后再回到那里,就会变得喜怒无常。有时它会继续工作一点,但所有时间它最终都会因“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]));
}
}

另一个类似的问题说这是因为它有其他代码添加了多个事务观察器,但这是我唯一称呼它的地方。但当然,每次购买尝试都会调用一次。我在 View 中执行 productsrquest 委托(delegate)命令确实加载了。

任何帮助将不胜感激。

最佳答案

错误消息表明消息正在发送到 InAppPurchaseManager 的已释放实例,即您的类。它发生在您打开 View (创建实例)、关闭 View (释放实例)、然后再次打开 View (创建第二个实例)之后。问题发生在 addPayment: 调用中。这表明框架仍然拥有旧的已发布实例的句柄,并且正在尝试向其发送消息。

当您调用时,您在 loadStore 中为框架提供了对象的句柄

  [[SKPaymentQueue defaultQueue] addTransactionObserver:self];

我看不到您将自己作为观察者移除的任何地方。发出通知的对象通常不会保留其观察者,因为这样做会产生保留周期和/或内存泄漏。

在您的 释放 您需要清理的代码并调用 removeTransactionObserver :.那应该可以解决您的问题。
- (void)dealloc {

[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];

[super dealloc];
}

关于crash - EXC_BAD_ACES 购买应用内购买时,仅在第二次进入商店后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12339566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com