You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:00:12