iOS nil、Nil、NULL、NSNull的区别(null)与<null>的处理: -[NSNull length]: unrecognized selector sent to instance


1. nil:指向一个对象的空指针
针对(null)这种情况
if(result==nil) { 
    NSLog(@"执行");
}
针对<null>的情况
if ([result isEqual:[NSNUll null]]) { 
    NSLog(@"执行");
}

2.Nil: 指向一个类的空指针
Class someClass = Nil;

3. NULL:指向其他类型(如:基本类型、C类型)的空指针
 例:

int *pointerToInt = NULL;
char *pointerToChar = NULL;

4. NSNull  集合中值为空的对象
 例子说明:
      // 因为 nil 被用来用为集合结束的标志,所以 nil 不能存储在 Foundation 集合里。
  NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil];
  // 错误的使用
  NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  [dict setObject:nil forKey:@"someKey"];
  // 正确的使用
  NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  [dict setObject:[NSNull null] forKey:@"someKey"];

例子 CRASH: -[NSNull length]: unrecognized selector sent to instance错误的处理办法
开发中从后台请求数据,返回如下:
2014-12-05 16:44:52.535 掌麦[6984:613] getDefaultAddress: reuslt == {  
item =     {  
data =         {  
address = "<null>";  
area = "<null>";  
city = "<null>";  
name = "";  
phone = 18503051318;  
province = "<null>";  
};  
mark = 1;  
msg = "\U6210\U529f";  
};  
status = 1;  
}  
我直接解析出字典dic,赋值: 
NSString  *address = [dic objectForKey: @"address "];
NSString  *name = [dic objectForKey: @"name "];
NSString  *phone = [dic objectForKey: @"phone "];

self.addressLabel.text = address;
self.nameLabel.text   = name;
self.phoneLabel.text   = phone;

结果报错:CRASH: -[NSNull length]: unrecognized selector sent to instance 

原因及时后台返回有些值为null,在object-c中就是nsull的空值

所以解析后,应加一判断,防止出错


if (![address isKindOfClass:[NSNull class]]) {
   self.addressLabel.text = address;
}

if (![name isKindOfClass:[NSNull class]]) {
self.nameLabel.text = name;
}

if (![phone isKindOfClass:[NSNull class]]) {
   self.phoneLabel.text = phone;
}
这样就OK了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值