今天在用到NSString类的时候遇到一个问题,挺费解的,问题是这样的:我从服务器上获取某字符串数据,考虑到有些对象不含这个字符串变量,我在使用时先判断该字符串是否为空,例如:

假设,这个字符串名叫str,

先判断if(str!=nil){

//do something

double data=[str doubleValue];

}

但是,当数据为空时依旧报错,错误内容如下:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull doubleValue]: unrecognized selector sent to instance 0x2b4ccd8'
*** First throw call stack:
(0x2ab6052 0x28d6d0a 0x2ab7ced 0x2a1cf00 0x2a1cce2 0x14ff1c 0x14e93c 0x10cdf1 0x105c88 0x133b40 0x135935 0x1532548 0x1534722 0x13e47c7 0x13e42c1 0xd1e3d66 0x13e728c 0x13e72b8 0x13e79ab 0x13ec288 0xd1e3ece 0xb5262 0xcf55f 0xb72c3 0x141d64e 0x141cc1c 0x144356d 0x142dd47 0x1444441 0x14444f9 0x163bc68 0x13fb4a1 0x13fc12b 0x163b4c7 0x1424427 0x142458c 0xd1fe280 0x14245cc 0xecdaf 0xf14e2 0xecb9d 0xd5d0e 0x135e88 0x107098 0x12d870 0x2ab7ec9 0x135a5c2 0x135a55a 0x13ffb76 0x140003f 0x13ff2fe 0x137fa30 0x137fc56 0x1366384 0x1359aa9 0x28b9fa9 0x2a8a1c5 0x29ef022 0x29ed90a 0x29ecdb4 0x29ecccb 0x28b8879 0x28b893e 0x1357a9b 0x18656 0x2be5 0x1)
terminate called throwing an exception

显示[NSNull doubleValue]...也就是说,我之前在if中判断(str!=nil)并不足以判断NSNull...这是为什么?nil和NSNull又有什么区别???

当我查看苹果官方文档时,有这么一个代码:

[cpp] view plaincopy
  1. id aValue = [arrayWithNull objectAtIndex:0];
  2. if (aValue == nil) {
  3. NSLog(@"equals nil");
  4. } else if (aValue == [NSNull null]) {
  5. NSLog(@"equals NSNull instance");
  6. if ([aValue isEqual:nil]) {
  7. NSLog(@"isEqual:nil");
  8. }
  9. }
  10. // output: "equals NSNull instance"

虽然最后我的问题解决了,我在if判断中用

[cpp] view plaincopy
[cpp] view plaincopy
  1. if(![tmpNewsModel.latitude isEqual:[NSNull null]]){
  2. //do something
  3. }

问题是解决了,但是还不太理解nil和NSNull的区别?今天时间不太够,先记下这个问题,有时间想想这个区别!

转载于:https://www.cnblogs.com/xukunhenwuliao/p/3576232.html

nil和NSNull相关推荐

  1. iOS开发 nil Nil NULL NSNull 的使用

    nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) nil 是一个对象值. Nil: A null pointe ...

  2. Objective-C 中 NULL、nil、Nil、NSNull 的定义及不同

    来源:XcodeMen(康祖彬) 链接:http://www.jianshu.com/p/5d7033b15052 本文由我们团队的 康祖彬 童鞋撰写,这是他的个人主页:https://kangzub ...

  3. 【iOS开发】—— nil、Nil、NSNull和NULL

    文章目录 nil Nil NULL NSNull 分析 nil nil是用来表示一个对象是空对象,即想要表示此对象不存在.给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉:或者 ...

  4. IOS 学习笔记 2015-03-20 O之 nil,Nil,NULL,NSNull

    1.oc最好 用nil   [ nil  任意方法],不会崩溃  nil 是一个对象值. NULL是一个通用指针(泛型指针). 2. NSNULL,NULL和nil在本质上应该是一样的,NULL和ni ...

  5. 学习笔记-nil NULL NSNull Nil的区别

    nil--表示实例对象为空  例如  NSString * string = nil;                                            NSArray * arr ...

  6. iOS开发-NULL和nullptr和nil和Nil还有NSNull

    2019独角兽企业重金招聘Python工程师标准>>> NULL和nullptr 在Clang 6.0 的stddef.h文件中可以找到NULL和nullptr的声明: 1 2 3 ...

  7. NULL、nil、Nil、NSNull的区别

    标志 值 含义 NULL (void *)0 C指针的字面零值 nil (id)0 Objecve-C对象的字面零值 Nil (Class)0 Objecve-C类的字面零值 NSNull [NSNu ...

  8. nil,Nil,NULL,NSNull

    nil:指向oc中对象的空指针 Nil:指向oc中类的空指针 NULL:指向其他类型的空指针,如一个c类型的内存指针 NSNull:在集合对象中,表示空值的对象 NSURL *url = nil: C ...

  9. nil/Nil/NULL/NSNull的来历

    学过C的同学都知道,C是用0来表示不存在的原始值.而NULL作为空指针,在指针环境中也相当于0值.其实NULL和0的值都是一样的.但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值 ...

最新文章

  1. linux pps 包 网卡,linux下安装PPS
  2. js 查找树节点 数组去重
  3. zcmu1203(逆序对,归并排序)
  4. 使用CocoaPods给微信集成SDK打印收发消息
  5. 下载新版火狐后无法同步书签_火狐浏览器书签同步设置教程
  6. 高中数学压轴解答题:函数零点
  7. jib构建镜像(使用阿里云容器镜像服务拉取镜像)
  8. 不可替代的测试人:一文解释探索性测试是什么
  9. 索骥馆-编程语言之《网络编程实用教程(第2版)》扫描版[PDF]
  10. 想要申请PhD,真是路漫漫啊
  11. 为什么结构方程模型路径系数很大却不显著?
  12. xml图片太大_XML的大图片还是Goo的大球图?
  13. OSG场景漫游(一)
  14. Unity游戏开发中的向量运算-点乘和叉乘
  15. Raspbian命令行安装desktop界面
  16. 一对一直播软件如何盈利?
  17. 戴尔服务器盘柜盘故障分析
  18. java之详解坦克大战_Java之详解坦克大战游戏(一)
  19. XL7005A xlsemi 降压型直流电源变换器芯片(高电压型)
  20. 产品设计中怎样将Rhino与KeyShot 结合

热门文章

  1. 完美实现Crysis道路系统,发图纪念一下
  2. 加利福尼亚大学(尔湾)等提出 Nasty Teacher,避免模型“被蒸馏”,加强知识产权保护(ICLR 2021)...
  3. ICCV 2021 LVIS Challenge 长尾分布实例分割挑战赛,冠军解决方案
  4. 视频+笔记+能够跑通的代码,《李宏毅机器学习完整笔记》发布!
  5. java中ajax由哪些组成,java中ajax
  6. c语言fseek128字节,C语言rewind和fseek函数的用法详解(随机读写文件)
  7. 博士申请 | 北京大学智能计算与感知实验室招收博士、硕士、本科实习生
  8. Transformer 的稳健性更好吗?
  9. 前沿 | NVIDIA PyTorch库让3D深度学习研究更简单!
  10. 信息提示无法建立数据连接服务器,FileZilla 链接FTP服务器无法建立数据连接: ECONNREFUSED...