0

背景:我对 iOS 8.2、8.3 使用了相同的代码,它运行良好。

PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
paymentPane.delegate = self;

[self presentViewController:paymentPane animated:TRUE completion:nil];

付款请求代码:

        PKPaymentRequest *request = [[PKPaymentRequest alloc] init];


        NSString *chargeApplePay=[NSString stringWithFormat:@"%.02f",pay];

        PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"Grand Total"
                                                                          amount:[NSDecimalNumber decimalNumberWithString:chargeApplePay]];

        request.paymentSummaryItems = @[total];
        request.countryCode = @"US";
        request.currencyCode = @"USD";
        request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa];
        request.merchantIdentifier = @"valid.com.myIdentifier";
        request.merchantCapabilities = PKMerchantCapability3DS;

问题:现在在 iOS 8.4 上,当我尝试展示我的 paymentPane 时,它​​的值不知何故为零。

致命异常:NSInvalidArgumentException 应用程序试图在 target 上呈现一个 nil 模态视图控制器。

我已经通过谷歌搜索和使用 stackoverflow 的答案进行了尝试。

  • 用过的支票如

    [PKPaymentAuthorizationViewController    canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]] 
    

    [PKPaymentAuthorizationViewController canMakePayments]

  • 检查我的商家 ID 是否有效。

  • 检查我用于请求的所有代码是否有效。
4

2 回答 2

2
  1. 检查您是否Credit card在设备中添加了信息Passbook

  2. 检查您是否可以使用您的设备付款。

    目标 C:

    if ([PKPaymentAuthorizationViewController canMakePayments]) {
        NSLog(@"Can Make Payments");
    }
    else {
        NSLog(@"Can't Make payments");
    }
    
    斯威夫特:
    if PKPaymentAuthorizationViewController.canMakePayments() {
        NSLog(@"Can Make Payments");
    }
    else {
        NSLog(@"Can't Make Payments");
    }
    

  3. 检查您是否可以使用 allowed 付款payment networks

    目标 C:
    NSArray *paymentNetworks = [NSArray arrayWithObjects:PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkAmex, nil];
    if ([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:paymentNetworks]) {
        NSLog(@"Can Make payment with your card");
    }
    else {
        NSLog(@"Card is not supporting");
    }
    迅速:
    let paymentNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]
    if PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(paymentNetworks) {
        NSLog(@"Can Make payment with your card");
    }
    else {
        NSLog(@"Card is not supporting");
    }
于 2015-08-17T12:08:06.737 回答
0

在 Xcode 调试器中运行时,我也遇到了类似的问题。作为一种解决方法,我在 Xcode 中停止该应用程序,然后在 iPhone 或 iPad 上手动启动该应用程序。

这样做的一个缺点显然是您无法调试任何问题。我不得不求助于 NSLog 并阅读控制台日志。

于 2015-08-05T09:49:05.370 回答