某些情况下,后台可能由于各种原因,对某个字段返回了null值,这时我们取到的就是[NSNull null]这样一个对象,再比如说,后台可能对某一个数据取值,但取到了0个,这时返回的是一个空组,我们取到的就是@[],空组。
取到的array是一个NSNull对象。
NSNull是一个特殊的类,它和nil一样,也代表空值,但二者有区别,NSNull不接收NSArray的那些方法,它只有一个类方法:
因此判断数组是否为空,需要对各种情况都进行判断。
比如这种情况:
(
"<null>",
"<null>",
"\U516c\U5171\U53f7",
"\U738b\U4e91\U9f99",
"\U6768\U4e3d\U8bda"
)
如果是给你一个tableview赋值,用数组的方式indexpath.row 读取赋值就会崩、
if (array != nil && ![array isKindOfClass:[NSNull class]] && array.count != 0)
这样就确保了数组不是nil对象,也不是NSNull对象,并且至少有一个元素的。
简写的判断:
if ([array isKindOfClass:[NSArray class]] && array.count > 0) {
}
首先我们要确保返回数据的确是数组NSArray类型的,其次保证数组中至少包含有一个元素。当然,需不需要对数组的元素个数做出判断,可以视情况而定。但必须确保是NSArray类型,而非NSNull等其他类型。
解决方案:
用了一个Category,叫做NullSafe 。
NullSafe思路:在运行时操作,把这个讨厌的空值置为nil,而nil是安全的,可以向nil对象发送任何message而不会奔溃。这个category使用起来非常方便,只要加入到了工程中就可以了,你其他的什么都不用做,很简单。
用法:
To use NullSafe, just drag the NullSafe.m file into your project. NullSafe will be automatically loaded at runtime, you don't need to include any header files in your code.
直接拖到到工程中,就可以避免崩溃了。
网友评论