IOS数组为空的处理

某些情况下,后台可能由于各种原因,对某个字段返回了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. 直接拖到到工程中,就可以避免崩溃了。

下载地址 https://github.com/nicklockwood/NullSafe

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏偏前端工程师的驿站

意译:《JVM Internals》

译者语                                  为加深对JVM的了解和日后查阅时更方便,于是对原文进行翻译。内容是建立在我对JVM的认...

25170
来自专栏沈唁志

深入解析PHP中array_merge函数的用法

11220
来自专栏青玉伏案

iOS开发之使用Runtime给Model类赋值

  本篇博客算是给网络缓存打个基础吧,本篇博客先给出简单也是最容易使用的把字典转成实体类的方法,然后在给出如何使用Runtime来给Model实体类赋值。本篇博...

22070
来自专栏公众号_薛勤的博客

Eclipse MAT内存分析工具(Memory Analyzer Tool)

MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的...

1.3K20
来自专栏IMWeb前端团队

Zepto核心模块之工具方法拾遗

本文作者:IMWeb 谦龙 原文出处:IMWeb社区 未经同意,禁止转载 前言 平时开发过程中经常会用类似each、map、forEach之类的方法...

29660
来自专栏我的博客

1分钟搞定linux sort命令

sort是用来排序的,默认是按照ascii升序排列 sort -u排序去重 sort -r 默认是升序排列,如果要降序就带上它 sort -o把结果定向到文件(...

32860
来自专栏阿凯的Excel

Read_CSV参数详解

pandas.read_csv参数详解 pandas.read_csv参数整理 读取CSV(逗号分割)文件到DataFrame 也支持文件的部分导入和选择迭代 ...

37160
来自专栏WindCoder

微信浏览器中reload()无法完成刷新页面的解决方案

今天有一个刷新的需求,先后使用了reload()、replace 方法以及window.location.href三种方式,结果都只是在pc端没问题,移动端微信...

2K10
来自专栏Objective-C

Swift 基本语法04-"switch"和"for"

29870
来自专栏xx_Cc的学习总结专栏

iOS底层原理总结 - 探寻KVO本质

373100

扫码关注云+社区

领取腾讯云代金券