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 上意外崩溃的主要内容,如果未能解决你的问题,请参考以下文章