Objective-C集成CashFree支付时触发未识别选择器错误求助
CashFree支付网关集成崩溃排查:
-[__NSCFConstantString count]: unrecognized selector sent to instance 核心崩溃原因
你调用enableComponents:方法时传入的是单个字符串(如@"card"),但该方法实际要求传入字符串数组。CashFree SDK内部会对传入参数调用count方法(数组专属方法),而字符串对象没有这个方法,因此触发崩溃。
代码问题修正
1. 修复支付组件启用方式
将多次调用enableComponents:改为一次性传入包含所有组件的数组:
CFPaymentComponentBuilder *paymentComponent = [[CFPaymentComponentBuilder alloc]init]; // 用数组一次性传入所有需要启用的组件 paymentComponent = [paymentComponent enableComponents:@[@"order-details", @"card", @"upi", @"wallet", @"netbanking", @"emi", @"paylater"]]; paymentComponent = [paymentComponent buildAndReturnError:nil];
2. 修复NSLog调用错误
onError:和verifyPaymentWithOrder_id:方法中NSLog用法不符合语法要求,需添加格式化字符串:
- (void)onError:(CFErrorResponse * _Nonnull)error order_id:(NSString * _Nonnull)order_id { NSLog(@"错误信息:%@,订单ID:%@", error, order_id); } - (void)verifyPaymentWithOrder_id:(NSString * _Nonnull)order_id { NSLog(@"需要验证的订单ID:%@", order_id); }
3. 补充必要的支付会话参数
setPaymentSessionId:和setOrderID:传入空字符串会导致支付流程无法正常执行,需替换为从后端获取的有效会话ID和业务订单ID:
sessionBuilder = [sessionBuilder setPaymentSessionId:@"后端生成的有效SessionID"]; sessionBuilder = [sessionBuilder setOrderID:@"你的业务系统订单ID"];
额外优化建议
- 确保使用最新版本的CashFree SDK,避免旧版本API兼容问题
- 调用
buildAndReturnError:时传入错误指针,可捕获构建过程中的具体错误:
NSError *buildError = nil; sessionBuilder = [sessionBuilder buildAndReturnError:&buildError]; if (buildError) { NSLog(@"Session构建失败:%@", buildError.localizedDescription); }
内容的提问来源于stack exchange,提问作者YashSaxena
相关产品推荐
相关产品推荐

