【问题标题】:I want to run both functions in my switch case but only one runs; how do i fix this?我想在我的开关盒中运行这两个功能,但只运行一个;我该如何解决?
【发布时间】:2019-01-31 00:19:21
【问题描述】:

以下函数描述了应用内购买 (IAP) 的 paymentQueue。选择 .purchase 案例时,将运行“SKPaymentQueue.default().finishTransaction(transaction)”函数。但是,在这种情况下,第二个函数“transactionComplete()”没有。

我想要的是:'SKPaymentQueue.default().finishTransaction(transaction)'函数先完成,然后运行'transactionComplete()'函数。

背景:

“SKPaymentQueue.default().finishTransaction(transaction)”是完成 IAP 交易的无效 StoreKit 函数。

“transactionComplete()”是我自己的函数,它显示一个弹出视图,感谢用户的购买。此功能有效,只是不适用于这种情况。

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        switch transaction.transactionState {
            case .purchased:
                SKPaymentQueue.default().finishTransaction(transaction)
                transactionComplete()
                break
            case .failed:
                print("transaction failed.")
                break
            default:
                break
        }
    }
}

提前致谢!

编辑:

由于这是我第一次使用 IAP,所以我正在尝试各种功能。因此,事实证明,我的应用程序正在从另一个文件中读取 paymentQueue(...) 函数的另一个副本,因为它所属的类被用作 AppDelegate.swift 中的观察者

【问题讨论】:

  • 仅供参考,您不需要在 Swift 开关中使用 break ,除非它是案例中的唯一行(如在您的默认实例中)。除非您显式调用fallthrough,否则在案例结束时中断是默认行为。
  • transactionComplete 应该被调用。尝试在该行上设置一个断点,看看它是否被命中。
  • 你能解释一下transactionComplete()里面发生了什么吗?您是否在transactionComplete() 中设置了断点以确认它实际上没有被调用,或者它只是没有按预期运行。

标签: swift switch-statement storekit


【解决方案1】:

这个方法可能不会在主线程上触发。

尝试使用print("isMain? \(Thread.current.isMainThread)") 来判断是否是,如果不是,请像这样包装你的回调:

DispatchQueue.main.async {
    transactionComplete()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 2019-09-23
    • 2022-12-07
    • 2014-08-06
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多