【问题标题】:PKPaymentAuthorizationViewController is crashing unexpectedly on iOS 8.4PKPaymentAuthorizationViewController 在 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 模态视图控制器。

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

  • 使用过的检查类似

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

    [PKPaymentAuthorizationViewController canMakePayments]

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

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

【问题讨论】:

    标签: ios objective-c ios8 applepay


    【解决方案1】:
    1. 检查您是否在设备Passbook中添加了Credit card信息。

    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. 检查是否可以使用允许的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 并阅读控制台日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多