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]
-
检查我的商家编号是否有效。
- 检查所有用于请求的代码是否有效。
-
检查是否在设备
Passbook
添加了Credit card
信息。 -
检查您是否可以使用您的设备付款。
目标C:
如果([PKPaymentAuthorizationViewController canMakePayments]){ NSLog(@“可以付款”); } else { NSLog(@“无法付款”); }
Swift:
如果PKPaymentAuthorizationViewController.canMakePayments(){ NSLog(@“可以付款”); } else { NSLog(@“无法付款”); }
- 检查您是否可以使用允许的
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并阅读控制台日志。