应用内购买UIViewController在SKPaymentQueue addPayment之后被解雇

时间:2013-03-27 14:30:46

标签: iphone ios in-app-purchase

我正在使用In-App Purchasing为iPhone和iPad创建应用程序,但我在iPhone上遇到了问题。当我点击我的一个可购买项目时,SKPayment被添加到SKPaymentQueue后,我的ViewController会自行解散,保留付款未经处理。这导致了崩溃,直到我将[[SKPaymentQueue defaultQueue] removeTransactionObserver:self]添加到dealloc

重新启动应用后,它会按预期处理付款并向用户授予他们购买的内容。除非已完全退出并重新启动,否则它不会处理付款。

我添加付款的方式如下:

- (void)purchaseConnector: (NSIndexPath *)indexPath
{
    SKProduct *selectedProduct = productDetailsList[indexPath.row];
    SKPayment *payment = [SKPayment paymentWithProduct:selectedProduct];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}

之后进入:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                [self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
                [self restoreTransaction:transaction];
                break;
            default:
                break;
        }
    }
}

交易的状态为SKPaymentTransactionStatePurchasing,然后继续,之后ViewController解散并弹出“确认您的应用内购买”UIAlert

同样,所有这些都与iPad预期完美相同,这些问题只能通过iPhone使用。

修改

我想澄清一下,问题是商店ViewController正在解散。我自己从不解雇它,似乎无法通过接收命令的地方。解雇不会发生在iPad上,只有iPhone。

1 个答案:

答案 0 :(得分:0)

你的代码看起来很好。

如果您遗漏了某些内容,请查看this