iOS crash:[__NSCFNumber length]: unrecognized selector sent to instance 0xb000000000000053
来源:互联网 发布:unity3d lua 热更新 编辑:程序博客网 时间:2024/06/05 19:54
[__NSCFNumber length]: unrecognized selector sent to instance 0xb000000000000053
很明显,是类型不对,把__NSCFNumber类型当成了NSString类型调用length造成的crash。但是为什么类型不对,还真调试了一会。
OC代码中接收后端发过来的4个数据,因为想到是直接解析的json格式数据,所以都当成NSString类型处理,蹊跷的是,第一个数据每次都没问题,处理第二个数据时就报上面的错误。调试打印class信息,经过
[NSJSONSerializationJSONObjectWithData]
解析后,第一个数据真的是NSString类型,所以调用length没问题,后面三个数据的确都是__NSCFNumber类型!
查了下后端PHP代码:发现第一个数据的确是按照string类型发的,而后三个数据都是按照数值类型发的。因为PHP是弱类型语言,写代码时对类型不敏感,潜意识里也认为发给前端的都是字符串,这也是我没有第一时间想到问题真正根源的原因。
总结:
OC收到后端的json数据,解析后可能有__NSCFNumber、NSString等类型,要具体确认后端发过来的数据类型,不能想当然的都当成NSString。这和Android开发有很大不同:Android的java解析后都是按照string处理,所以经验有的时候也害人..
知道了问题原因,bug就很容易修了,手动转换一下搞定:
NSString *strLevel = [NSString stringWithFormat:@"%@", dicUserData[@"level"]];
但是还没有研究PHP底层是怎么把数据类型信息打包发送给前端的,而OC又是怎么收到类型信息、识别类型信息并转化为对应类型对象的。
- iOS crash:[__NSCFNumber length]: unrecognized selector sent to instance 0xb000000000000053
- [__NSCFNumber length]: unrecognized selector sent to instance
- [__NSCFNumber length]: unrecognized selector sent to instance
- -[__NSCFNumber length]: unrecognized selector sent to instance
- iOS报错[__NSCFNumber length]: unrecognized selector sent to instance
- iOS报错[__NSCFNumber length]: unrecognized selector sent to instance
- [__NSCFNumber length]: unrecognized selector sent to instance 0x8b3c310
- -[__NSCFNumber length]: unrecognized selector sent to instance 0x14d697b0'
- [__NSCFNumber length]: unrecognized selector sent to instance 0x8b3c310’
- [__NSCFNumber length]: unrecognized selector sent to instance 0xb000000000000022
- [__NSCFNumber length]: unrecognized selector sent to instance 0x8b3c310’ - andy_shen
- reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x1c0424640'
- iOS:编译错误[__NSCFNumber length]: unrecognized selector sent to instance 0x8b3c310’ - andy_shen
- Xcode:[__NSCFNumber length]: unrecognized selector sent to instance崩溃解决
- iOS BUG整理--[__NSCFNumber length]: unrecognized selector sent to instance 崩溃解决
- -[__NSCFNumber length]: unrecognized selector sent to instance 0x1657c5c0 2014-09-24 14:47:39.170 St
- -[__NSCFNumber length]: unrecognized selector sent to instance 0x12465980 崩溃分析及解决方法
- reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x8b3c310’错误解决
- JSF与Spring的整合原理
- 无穷受限玻尔兹曼机在雷达图像识别上的应用 以及美国空军的SAR图像数据库MSTAR简介
- Struts2执行原理
- js做的打字小游戏~按下键盘的时候为什么没有反应,附上我的代码
- Eclipse不能创建Maven webapp项目/Eclipse创建Maven工程的webapp项目时报错
- iOS crash:[__NSCFNumber length]: unrecognized selector sent to instance 0xb000000000000053
- python绘制误差柱状图
- Android的res与assets资源的使用
- 搭建ELK(ElasticSearch+Logstash+Kibana)日志分析系统(十五) logstash将配置写在多个文件
- 仿雅虎新闻的加载自定义view
- 数据结构与算法 ------ 表,栈,和队列
- 排序算法(六):快速排序
- C语言小问题---结构体
- 购物车,增加,删除,总价