ios - 应用内购买 - EXC_BAD_ACCESS

标签 ios swift in-app-purchase storekit

我在尝试测试应用内购买(iOS 8+ Swift 1.2)时遇到了一些奇怪的问题。我的 iTunes 连接帐户中有一个消耗品,我能够很好地检索产品和产品详细信息。当我想要启动购买时,EXC_BAD_ACCESS 崩溃之前的代码行位于

//Transaction has been made
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {

    if(list.count == 0){
        return
    }

    //code
    for transaction:AnyObject in transactions{
        var trans = transaction as! SKPaymentTransaction
        println(trans.error)

        switch trans.transactionState {
        case .Purchasing:
            println("Purchasing...The transaction is being processed by the App Store.")
        case .Purchased:
            println("Buy, ok unlock iap here")
            println(p.productIdentifier)
            queue.finishTransaction(trans)
            let prodID = p.productIdentifier! as String
            switch prodID {
                case iapID:
                    println("send submission")
                    saveSuperSubmission()
                default:
                    println("IAP not Setup")
            }
        case .Failed:
            println("buy error")
            queue.finishTransaction(trans)
        default:
            println("updatedTransactions: \(trans.transactionState.rawValue)")
            break;
        }
    }
}

点击.Purchasing案例后,它立即崩溃。现在,在询问我的密码后,在物理设备上会出现购买产品的确认提示,当我选择购买时,另一个提示指出“此应用内购买已被购买”。一旦崩溃发生,Xcode 不会在跟踪中显示我的任何代码。它显示了 UIApplicationMain 以及如下所示的内容

  0x2daf0a04 <+1436>: blx    0x2e1ae2c8                ; symbol stub for: CFDictionaryRemoveAllValues$shim
    0x2daf0a08 <+1440>: ldr    r0, [sp, #0x2c]
    0x2daf0a0a <+1442>: ldr    r1, [sp, #0x18]
  1. 如果产品是“消耗品”类型,为什么还要关心它是否已被购买?我预计这个产品会被多次购买。
  2. 如何更好地调试此错误?

最佳答案

将您的代码与我上一个项目的代码进行比较。

我会在开始时进行更安全的转换(您将受到保护,免受某些意外状态的影响):

if let trans = transaction as? SKPaymentTransaction

那你我也纠正一下

    default:
        println("updatedTransactions: \(trans.transactionState.rawValue)")
        queue.finishTransaction(trans)

因为您还可以从 8.0 开始使用 SKPaymentTransactionStateDeferred 并且它应该已完成。

关于ios - 应用内购买 - EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892331/

相关文章:

ios - masonry 自动布局不起作用

swift - 如何在 NSManagedObject Swift 扩展中创建托管对象子类的实例?

iPhone 。按钮图像不切换

ios - json 请求响应出现问题,得到空白响应

ios - 使用material.io时通过segue链接按钮

ios - 应用内购买仅需 0.00 美元

ios - 应用内购买 : list of product identifiers is always empty

ios - 应用内 iOS "Confirm your in app purchases"会弹出购买 ListView

ios - 寻找一个 cordova 插件来提示用户

ios - 在 Swift 中使用 Switch 语句 - 值绑定(bind)在括号内还是在外?