PKPaymentAuthorizationViewController在iOS 8.4上意外崩溃

背景:我使用相同的代码为iOS 8.2,8.3它工作正常。

PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request]; paymentPane.delegate = self; [self presentViewController:paymentPane animated:TRUE completion:nil]; 

PaymentRequest代码:

  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时,它的值是零。

致命exception:NSInvalidArgumentException应用程序试图在目标上呈现一个零模式视图控制器。

我已经尝试了谷歌search和使用从stackoverflow的答案。

  • 使用支票像

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

    [PKPaymentAuthorizationViewController canMakePayments]

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

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

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

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

    目标C:

     如果([PKPaymentAuthorizationViewController canMakePayments]){
     NSLog(@“可以付款”);
     }
     else {
     NSLog(@“无法付款”);
     }
    

    Swift:

    如果PKPaymentAuthorizationViewController.canMakePayments(){
     NSLog(@“可以付款”);
     }
     else {
     NSLog(@“无法付款”);
     }
    

  3. 检查您是否可以使用允许的payment networks

    目标C:

      NSArray * paymentNetworks = [NSArray arrayWithObjects:PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkAmex,nil];
    如果([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:paymentNetworks]){
     NSLog(@“可以用你的卡进行支付”);
     }
     else {
     NSLog(@“卡不支持”);
     } 

    Swift:

    让paymentNetworks = [PKPaymentNetworkAmex,PKPaymentNetworkMasterCard,PKPaymentNetworkVisa]
    如果PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(paymentNetworks){
     NSLog(@“可以用你的卡进行支付”);
     }
     else {
     NSLog(@“卡不支持”);
     } 

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

这个的一个缺点显然是你不能debugging任何问题。 我不得不求助于NSLog并阅读控制台日志。