PKPaymentAuthorizationViewController 在 iOS 8.4 上意外崩溃

Posted

技术标签:

【中文标题】PKPaymentAuthorizationViewController 在 iOS 8.4 上意外崩溃【英文标题】:PKPaymentAuthorizationViewController is crashing unexpectedly on iOS 8.4 【发布时间】:2015-08-01 10:15:22 【问题描述】:

背景:我在 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 应用程序试图 在目标上显示一个 nil 模态视图控制器。

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

使用过的检查类似

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

[PKPaymentAuthorizationViewController canMakePayments]

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

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

【问题讨论】:

【参考方案1】:

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

    检查您是否可以使用您的设备付款。目标 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");
    
    

    检查是否可以使用允许的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");
    

【讨论】:

显然我已经完成了所有这些,并且它在 iOS 8.3 中运行。【参考方案2】:

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

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

【讨论】:

以上是关于PKPaymentAuthorizationViewController 在 iOS 8.4 上意外崩溃的主要内容,如果未能解决你的问题,请参考以下文章