3

Apple のポータルで iOS アプリケーションのアプリ内購入を構成しました。製品を使用SKProductsRequestして正しく受け取り、NSMutableDictionary.

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse*)response
{
    NSLog(@"%@", @"AppStore: Accepted");
    for (SKProduct * s in response.products) {
        NSLog(@"    [%@]", s.productIdentifier);
    }

    [productsById removeAllObjects];

    for (SKProduct * product in response.products) {
        [productsById setObject:product forKey:product.productIdentifier];
    }

    [request release];
}

ただし、購入しようとすると、addPayment行がスローされます'NSInvalidArgumentException', reason: '*** setObjectForKey: key cannot be nil'

-(void)purchase:(NSString *)productId {
    SKProduct *selectedProduct = [productsById objectForKey:productId];
    SKMutablePayment *payment = [SKMutablePayment paymentWithProduct: selectedProduct];
    payment.quantity = 1;

    [[SKPaymentQueue defaultQueue] addTransactionObserver: self];
    [[SKPaymentQueue defaultQueue] addPayment: payment]; //<- this line throws an exception
}

Apple のドキュメントに記載されているように、productId が有効な製品であり、payment.quantity が > 0 であることを確認しました。シミュレーターと iPad の両方で試しましたが、結果は同じでした。助けてくれてありがとう。

4

3 に答える 3

0

SKPaymentQueue addPayment:問題が見つかりました。エラーはメッセージのパラメーターではなくSKPaymentQueue paymentQueue: updatedTransactions: 、例外のスタック トレースを出力した後、メッセージが実際にデリゲートにすぐに送信されていることに気付きましaddPayment:た。addPayment:デリゲート コードを中断せずにステップインすると、デバッガーは直接例外に遭遇します。

于 2013-04-06T13:04:03.463 に答える
0

productsById辞書を割り当てていないと確信しています。

メソッドに次のようなものself.productsById = [@{} mutableCopy];を入れます-viewDidLoad:

于 2013-04-05T22:24:50.843 に答える
0

同様の問題がありました。私の場合、逃したため、からの例外SKPaymentQueue.defaultQueue().addPayment(payment)がスローされました:

SKPaymentQueue.defaultQueue().removeTransactionObserver(self)

私のdeinit方法で。

于 2016-08-22T08:30:37.963 に答える