Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >IOS数组为空的处理

IOS数组为空的处理

作者头像
rectinajh
发布于 2018-05-17 08:12:47
发布于 2018-05-17 08:12:47
3.4K0
举报

某些情况下,后台可能由于各种原因,对某个字段返回了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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.09.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Swift 基本语法06-数组和字典
一个iOS开发初级菜鸡.png Swift 基本语法01-Swift简介 Swift 基本语法02-"let"和"var" Swift 基本语法03-"if let"和"guard let" Swift 基本语法04-"switch"和"for" Swift 基本语法05-"String" 一、数组的定义 1.1 Swift与OC一样,使用[]定义数组, 区别: 1> Swift没有@符号 2> 中文也可以正常输出 3> 而且可以根据数组中的内容自动推导出数组的类型(和OC中的数组指定泛型类似
用户1890628
2018/05/10
1.4K0
iOS 二级菜单(UITableView实现)「建议收藏」
首先建立一个cell的类,用于存放cell中的内容 ,继承自uitableviewcell;
全栈程序员站长
2022/06/27
1.3K0
iOS实现三列表格点选(附Demo)
项目中常用到列表赛选,一般来说都是一列、两列的,这段时间我自己项目用到了三列,网上也没见到很好的Demo参考,无奈自己按着自己的想法写了一个,存粹提供一种方法供大家参考下。 这个Demo我仅仅写了一个
Raindew
2018/06/14
8730
iOS_OC判空:NULL、nil、Nil、NSNull
NULL = (void *)0 C指针的字面空值 nil = (id)0 OC对象的字面空值 Nil = (Class)0 OC类的字面空值 NSNull = [NSNull null] 空值的OC对象 具体如下:  //1. NULL //表示C的指针空值 int *pointerToInt = NULL; char *pointerToChar = NULL; struct TreeNode *rootNode = NULL; // 2
mikimo
2022/07/20
9360
iOS-NSArray与Model模型
一·应用场景 在日常开发中写页面UI,必定离不开与后端的数据JSON交互 1.如何快速写一个UITableView Step1:UITableView懒加载 - (UITableView *)tableView { if(!_tableView){//alloc init 初始化一个TableView} } Step2.继承Delegate&DataSource 这里举几个重要的必须实现的协议方法 - (void)didSelectRowAtIndexPath { //这里实现c
Wilbur-L
2021/08/13
6750
iOS开发:实现点击常用控件弹出地区选择框(万能方法)
随后还会分享实现点击UITextField弹出UIDatePicker日期选择器的博文,本篇博文只分享点击控件弹出选择框的方法实现(点击UIButton或者UILabel弹出选择提示框)。
三掌柜
2021/12/15
1.7K0
iOS AFNetworking 源码阅读三
接下来我们来补充之前AFURLResponseSerialization这一块是如何解析数据的
赵哥窟
2018/12/17
9020
iOS 中nil,Nil,NULL,NSNull的区别
类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法)。 对象是类的一个实例,是一个具体的事物。 类与对象是抽象与具体的关系。 类其实就是一种数据类型,它的变量就是对象。 nil、Nil、NULL、NSNull的区别 nil:指向一个对象的空指针 Nil:指向一个类的空指针 NULL:指向其他类型(如:基本类型、C类型)的空指针 NSNull:通常表示集合中的空值 举例: NSURL *url = nil; Class class = N
王大锤
2018/05/17
1K0
iOS面向切面的TableView-AOPTableView
这个是公司很久之前的开源项目,一个大牛写的,在项目中一直有在用,今天有空发了点时间看下如何实现,看了之后感觉挺有收获,故撰此文,分享给需要的同学。
iOSSir
2019/05/11
1K0
编码篇-一个商品录入时的UITableCell的总结
我们都知道iOS的UITableView有自带的 左滑动删除的方式,此中方式中,不论是删除数据源,还是删除对应的Cell都是很简单的。可是有时候,产品不是通过滑动删除的,而是点击Cell上的删除图标。本文就是小结一下,商品录入时 UITableViewCell的使用。
進无尽
2018/09/12
5120
编码篇-一个商品录入时的UITableCell的总结
IOS开发之新浪围脖
  IOS开发和Web开发一样,网络请求方式包括Get和Post方式。Get和Post两者有和特点和区别,在本篇博客中不做过多的论述,本篇的重点在于如何GET数据和POST数据。下面还会提到如何在我们的项目中使用CocoaPods, CocoaPods的安装和使用教程请参考链接http://code4app.com/article/cocoapods-install-usage。上面详细的介绍了CocoaPods的安装过程和如何通过CocoaPods引入第三方类库。在本篇博客中提到CocoaPods,是因为
lizelu
2018/01/11
1.3K0
IOS开发之新浪围脖
AFNetworking源码探究(十一) —— 数据解析之子类中协议方法的实现
上一篇我们主要介绍了有关数据解析类和协议,以及实现解析的架构,这一篇就分开讲述各个类是如何实现对应的数据解析的。
conanma
2021/09/03
1.2K0
iOS 组件化之CTMediator
关于iOS组件化网上资料太多,这里只是从个人观点说明一下怎么使用组件化和使用组件化的优点和缺点 首先下载CTMediatorDemo
赵哥窟
2020/07/10
2.1K0
iOS 组件化之CTMediator
iOS-关于随机数总结rand()random()drand48()arc4random()rac4random_uniform(int upper_bound)实例应用
C语言随机函数rand() random() drand48() OC随机函数arc4random() arc4random_uniform() rand() // 生成m~n之间的随机整数 -(int)randFrom:(int)m to:(int)n{ static BOOL isSranded = NO; if (!isSranded) { isSranded = YES; srand((int)time(0)); } return m
用户2215591
2018/06/29
1.2K0
iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流
上篇博客的实例是自带的UICollectionViewDelegateFlowLayout布局基础上来做的Demo, 详情请看《iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调》。UICollectionView之所以强大,是因为其具有自定义功能,这一自定义就不得了啦,自由度非常大,定制的高,所以功能也是灰常强大的。本篇博客就不使用自带的流式布局了,我们要自定义一个瀑布流。自定义的瀑布流可以配置其参数: 每个Cell的边距,共有多少列,
lizelu
2018/01/11
1.4K0
iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流
iOS开发之表视图爱上CoreData
  在接触到CoreData时,感觉就是苹果封装的一个ORM。CoreData负责在Model的实体和sqllite建立关联,数据模型的实体类就相当于Java中的JavaBean, 而CoreData的功能和JavaEE中的Hibernate的功能类似,最基本是两者都有通过对实体的操作来实现对数据库的CURD操作。CoreData中的上下文(managedObjectContext)就相当于Hibernate中的session对象, CoreData中的save操作就和Hibernate中的commit,还
lizelu
2018/01/11
2.2K0
iOS开发之表视图爱上CoreData
iOS AFNetworking 源码阅读一
大名鼎鼎的AFNetWorking,做iOS开发的人都知道吧。 AFNetWorking一款轻量级网络请求开源框架,基于iOS和mac os 网络进行扩展的高性能框架,大大降低了iOS开发工程师处理网络请求的难度,让iOS开发变成一件愉快的事情。
赵哥窟
2018/12/17
1.3K0
iOS AFNetworking 源码阅读一
iOS面试知识总结之功能区分
凡经历过iOS面试的我们总会发觉,即使实际开发中做过许多项目,也难免为一个普通的面试题受挫。这也许不是因为我们技术不过关,而是因为在平时我们忽略了怎样将用到的知识很好的表述出来。闲暇之余我把一些常见的iOS面试问题总结一下,即使不是为了面试,也有助于对基础知识的回顾。 此篇总结在iOS中遇到的有关概念或功能相似的,容易混淆的知识点: 1.区分UDID与UUID UDID(Unique Device Identifier)用户设备唯一编码 UDID是一串由40位16进制数组成的字符串,用以标识唯一的设备。
梧雨北辰
2018/04/24
8770
iOS_11_tableViewCell使用alertView变更数据
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117667.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/05
4890
iOS_11_tableViewCell使用alertView变更数据
iOS TableView多级列表
TableView多级列表的实现效果预览图 需求 TableView多级列表:分级展开或合并,逐级获取并展示其子级数据,可以设置最大的层级数,支持多选、单选、取消选择。 示例Demo:MultilevelList 思路 由需求和示意图可知,这些数据元素之间存在着一对多关系,很符合 数据结构与算法 -- 树形结构 的特征。那么,我们就用树形结构中的结点(Node)来作为存储和关联数据的模型(NodeModel)。 //每个结点信息,采用的是树状结构模型 关于树状结构不了解的可以看看
且行且珍惜_iOS
2019/03/04
2.3K0
iOS TableView多级列表
相关推荐
Swift 基本语法06-数组和字典
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文