首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iphone - 我如何检查NSMutableArray ObjectAtIndex是否没有任何值

首先,我们需要明确一点,NSMutableArray是Objective-C中的一个可变数组,它不能直接存储nilnull值。当我们使用objectAtIndex:方法访问数组中的元素时,如果索引超出数组范围,程序会抛出异常。因此,我们需要在访问数组元素之前进行边界检查。

为了检查NSMutableArray的某个索引是否有值,我们可以使用count方法来获取数组的元素个数,然后进行比较。以下是一个示例代码:

代码语言:objective-c
复制
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Apple", @"Banana", @"Orange", nil];
NSUInteger index = 3;

if (index < [array count]) {
    id object = [array objectAtIndex:index];
    // 处理数组中的对象
} else {
    NSLog(@"数组中没有该索引的值");
}

在这个示例中,我们首先创建了一个包含三个元素的NSMutableArray。然后,我们检查索引3是否小于数组的元素个数。如果是,我们就可以安全地使用objectAtIndex:方法访问该索引的元素。否则,我们会输出一条日志,表示数组中没有该索引的值。

需要注意的是,这个示例是针对Objective-C语言的。如果您使用的是Swift语言,可以使用Swift中的数组类型(如Array)和相应的方法来实现类似的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS 二级菜单(UITableView实现)「建议收藏」

大家好,又见面了,是你们的朋友全栈君。 作为iOS 新手 这个东西捣鼓了一天,主要是没耐心。静下心来其实一会就能摆平。 总结的经验,宁可精心学一个小时,也别浮躁学1天。...2 如果有子菜单点一下打开,如果没有,则实现相应的操作; 我们来实现他(界面有点丑,但主要是功能,界面很简单自己设计一下就行): 个人想法是这样的: 首先建立一个cell的类,用于存放cell中的内容...property (nonatomic,strong) NSArray *ChildArray;//存放子菜单 @property (nonatomic,assign) BOOL Open;//表示子菜单是否打开...; 下面说一下大体的思路吧; 当选中cell的时候看看这个cell有没有子菜单,如果没有很简单直接打开就行了; 如果有那么我们先将这些子菜单想办法添加到掌管父菜单的数组中,然后生成一个位置数组(为了在...= [[TableCell alloc]init]; if(indexPath.row<_TableArry.count) { cell = [_TableArry objectAtIndex

1.1K30

iOS跑步软件开发-从无到有

这里主要有两种方式,一种是使用陀螺仪(或是加速仪)获取手机各个方向的加速度来统计用户的运动,另外一种就是通过GPS定位地图来统计用户的运动.在的做的应用里面也是两种方案都采用了.接下来,我们分别讲解每一种方式是如何使用的...motionManager.accelerometerAvailable) { // fail code // 检查传感器到底在设备上是否可用 } motionManager.accelerometerUpdateInterval...,具体代码如下所示. // 踩点数组 NSMutableArray *arrCaiDian = [[NSMutableArray...假定加速度合适,用户用手快速晃动手机,这时候也是会有误差数据的产生,所以这时候我们还是需要根据一个来判断arrCaiDian数组中的数据是否合理.这个属性就是时间,时间从哪里来呢?...---- GPS信号是没有直接数据的展示的.我们需要从回调方法的location参数中拿到horizontalAccuracy属性和verticalAccuracy属性的,这两个就是判断精度圈大小的

69730

Objective-C中的集合类

: - (BOOL) isEqualToSet: (NSSet *) otherSet;     ​    ​    ​    ​(5)判断一个元素是否在本集合中 -(BOOL) member: (id...@", element);   //比较两个Set是否相等 if ([set1 isEqualToSet:set2] == NO) {     NSLog(@"set1 !...= set2"); }   //查看一个元素是否在一个set中 if ([set1 member:@"aa"]) {     NSLog(@"aa 在set1中"); }     ​运行结果为: 1...:34.844 HelloOC[701:303] bbb     ​    ​ 四:把基本数据类型包装成对象     ​    ​前面不止一次的提到在OC中的集合类中是不能放基本数据类型的,那么我们如何把基本数据类型封装成对象呢...BOOL) boolValue;    ​(NSString *) stringValue;      ​    ​    ​2、在集合类中是不可以存储nil(空的),因为nil作为nil的结束符,那么我们如何来存储空对象呢

1.1K70

IOS开发系列——启动页专题【整理,部分原创】

1 系统自带方式 1.1 添加图片 1,准备图片资源,放入工程中,即可,默认时间为1s iOS设备现在有三种不同的分辨率:iPhone 320x480、iPhone 4 640x960...默认启动图片,如果没有提供上面几个iPad专用启动图片,则在iPad上运行时也使用Default.png(不推荐) 320x480或者320x460 Default@2x.png iPhone4启动图片...可能是因为调用 makeKeyAndVisible时会去判断当前程序是否显示状态栏,以此来布导航栏的位置。...是用NSUserDefaults +UIScrollview实现。 新建一个类,继承UIView,假设名为Guide。...addSubview:scrollView]; //关闭水平方向上的滚动条 scrollView.showsHorizontalScrollIndicator =NO; //是否可以整屏滑动

1.6K10

iOS开发UI篇--一个可扩展性极强的树形控件

1则表示该节点为根节点 nodeId : 每个节点自身的id号,是每个节点的唯一标示 name : 节点的名称 depth : 该节点所带的树形结构中的深度,根节点的深度为0 expand : 该节点是否处于展开状态...@property (nonatomic , assign) int depth;//该节点的深度 @property (nonatomic , assign) BOOL expand;//该节点是否处于展开状态...三、实现原理 树形结构的列表用的其实就是UITableView控件,但是如何能够让UItableView能够动态的增加和删除指定的行数的cell是实现树形结构的关键所在。...*)createTempData : (NSArray *)data{ NSMutableArray *tempArray = [NSMutableArray array]; for...你的支持是继续的动力。 下篇文章预告:iOS开发UI篇--一个支持图文混排的ActionSheet 文章来源于网络,如有侵权,请联系小编删除。

1.1K00

iOS获取通讯录联系人信息 原

权限申请代码示例如下:     //这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录     int __block tip=0;     //声明一个通讯簿的引用     ABAddressBookRef...arrayWithObjects:@"123",@"456",nil];     // 电话号码对应的名称     NSArray *labels = [NSArray arrayWithObjects:@"iphone...:i], (__bridge CFStringRef)[labels objectAtIndex:i], &obj);     }     // 设置phone属性     ABRecordSetValue...        }     }     // 保存修改的通讯录对象     ABAddressBookSave(addBook, NULL); 四、重中之重-关于内存管理 上面的代码为了演示方便,创建的全部引用都没有释放...ABAddressBookCreate()创建一个引用对象时,切记无论ARC还MRC,要用CFRelease()进行释放引用,例如上面的例子,我们需要加上这句代码 CFRelease(addBook); 如果你耐心的看到了这里,想你一定明白了为什么不在前边的代码里说明这个问题

1.2K40

iOS获取通讯录联系人信息

权限申请代码示例如下:     //这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录     int __block tip=0;     //声明一个通讯簿的引用     ABAddressBookRef...arrayWithObjects:@"123",@"456",nil];     // 电话号码对应的名称     NSArray *labels = [NSArray arrayWithObjects:@"iphone...:i], (__bridge CFStringRef)[labels objectAtIndex:i], &obj);     }     // 设置phone属性     ABRecordSetValue...}     }     // 保存修改的通讯录对象     ABAddressBookSave(addBook, NULL); 四、重中之重-关于内存管理 上面的代码为了演示方便,创建的全部引用都没有释放...ABAddressBookCreate()创建一个引用对象时,切记无论ARC还MRC,要用CFRelease()进行释放引用,例如上面的例子,我们需要加上这句代码 CFRelease(addBook); 如果你耐心的看到了这里,想你一定明白了为什么不在前边的代码里说明这个问题

1.4K40

【iOS开发】浅谈iOS列表分页数据管理

这里是个人iOS开发中经历过的一些列表数据管理。是给viewController瘦身过程中的一些收获,不考虑设计模式。如果您有更好的管理方式,希望能交流。谢谢。...*list; // 数据list @property (nonatomic) BOOL haveMore; // 是否有下一页 @property (nonatomic...) BOOL isRefresh; // 是否是刷新数据,如果是刷新数据,则把当前数据清空 /** 从网络返回的数据中解析数据成model保存到list中...再后来,各路大神写出了各种字典转model,model转字典的库,手动解析model就没有再做过了,从最开始的JSONModel到最近用的YYModel,这些库可以省去大部分的解析代码,判断代码。...开发中推荐YYModel,JSONModel在多线程写入时,没有做同步,会有crash的情况发生。

1.1K30

iOS OC你了解的锁有哪些

这个参数可以是任何对象,包括 self,或者是自定义的信号量。针对不同的操作应该定义不同的信号量。 @synchronized() {…} 大括号中就是要加锁执行的代码,代码会操作一些数据。...1;这个函数的作用是这样的,如果semaphore信号量的大于0,该函数所处线程就继续执行下面的语句,并且将信号量的减1;如果semaphore的为0,那么这个函数就阻塞当前线程等待timeout...NSCondition NSCondition 的对象实际上作为一个锁和一个线程检查器:锁主要为了当检测条件时保护数据源,执行条件引发的任务;线程检查器主要是根据条件决定是否继续运行线程,即线程是否被阻塞...等别人退票"); [self.condition lockWhenCondition:1]; NSLog(@"====在一号窗口买了一张票,%@",[self.tickets objectAtIndex...等别人退票"); [self.condition lockWhenCondition:2]; NSLog(@"====在二号窗口买了一张票,%@",[self.tickets objectAtIndex

96120

OC知识--Foundation框架详尽总结之『数组类』

NSArray的常用方法 // 先定义一个数组,用于举例说明下面各个常用方法如何使用 NSArray *arr = [NSArray arrayWithObjects:@"abc",@"edf",@"hij...获取集合元素个数- (NSUInteger)count; NSLog(@"count = %lu",[arr count]); 输出结果:count = 3 获得index位置的元素- (id)objectAtIndex...:(NSUInteger)index; NSLog(@"arr[1] = %@",[arr objectAtIndex:1]); 输出结果:arr[1] = edf 是否包含某一个元素- (BOOL...arrayWithObjects:@"Jack", @"Rose", @"Jim", nil]; 现在数组的创建方式 @[@"Jack", @"Rose", @"Jim"]; 之前数组元素的访问方式 [array objectAtIndex...)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument; // 让数组中所有对象执行这个方法 // 注意:如果数组中的对象没有这个方法会报错

65040

【iOS】一段防护代码引发的内存风暴

收到反馈后,开发同学在TME的火眼APM平台上根据用户id进行搜索判断,是否有共性的Crash堆栈。将所用的用户都检索了后发现,并没有相关的堆栈信息。...initWithObjects:count: objectAtIndex: objectAtIndexedSubscript: 对可变的NSMutableArray,将这5个方法进行了swizzle替换...我们发现@autoreleasepool content对象都集中在NSMutableArray 的 kscrash_objectAtIndex: 方法中被创建。...是一个极大和极小。代表两个Observer分别需要在状态通知中,被最早调用和最晚调用。...4.6 OOM的原因分析 结合上面的背景知识,再来看我们的业务场景 我们swizzle了NSMutableArray的方法,将objectAtIndex转移至业务层的kscrash_objectAtIndex

44710

iOS开发·runtime原理与实践: 方法交换篇(Method Swizzling)(iOS“黑魔法”,埋点统计,禁止UI控件连续点击,防奔溃处理)

原理与注意 原理 Method Swizzing是发生在运行时的,主要用于在运行时将两个Method进行交换,我们可以将Method Swizzling代码写到任何地方,但是只有在这段Method Swilzzling...那么这对数组越界的情况下的奔溃,你有没有办法拦截? 思路:对NSArray的objectAtIndex:方法进行Swizzling,替换一个有处理逻辑的方法。...下面列举了NSArray和NSDictionary本类的类名,可以通过Runtime函数取出本类: 类名 真身 NSArray __NSArrayI NSMutableArray __NSArrayM...- (id)cm_objectAtIndex:(NSUInteger)index { // 判断下标是否越界,如果越界就进入异常拦截 if (self.count-1 < index)...:3]; //本来要奔溃的 [array objectAtIndex:4]; } 运行之后,发现没有崩溃,并打印了相关信息,如下所示。

2.4K60

iOS - 关于 KVC 的一些总结

注意: 在使用数组运算符时,如果有任何操作的对象为nil,则valueForKeyPath:方法将引发异常。...validateValue方法的默认实现是查看消息接收者类中是否实现了遵循命名规则为validate:error:的方法,如果有的话就返回调用该方法的结果;如果没有的话,则默认验证成功并返回YES...如果找到就返回一个代理对象,该代理对象将接收所有NSMutableArray消息,通常是NSMutableArray或其子类。否则执行④。...Q:通过 KVC 键值编码技术是否会破坏面向对象的编程方法,或者说违背面向对象的编程思想呢?...valueForKey:和setValue:forKey:这里面的key是没有任何限制的,当我们知道一个类或实例它内部的私有变量名称的情况下,我们在外界可以通过已知的key来对它的私有变量进行访问或者赋值的操作

1.8K10

BeeHive —— 一个优雅但还在完善中的解耦框架

接下来就依次分析模块注册,模块事件,模块调用是如何实现解耦的。 二. BeeHive模块注册 先从模块的注册开始分析,来看看BeeHive是如何给各个模块进行注册的。...Module不能在任何其他地方alloc创建出来,即使创建一个新的Module实例出来,它也并不在BHModuleManager的管理下,是无法接收BHModuleManager分发的系统事件,创建出来是没有任何意义的...如果moduleInstance重写了async方法,那么就会根据这个方法返回的来进行是否异步加载的判断。 modInit:方法里面干很多事情。比如说对环境的判断,根据环境的不同初始化不同的方法。...,一是检查impClass 是否遵循了 Protocol 协议,二是检查Protocol 协议是否已经注册过了。...可能还在完善中的功能 BeeHive通过处理Event编写各个业务模块可以实现插件化编程,各业务模块之间没有任何依赖,core与module之间通过event交互,实现了插件隔离。

2.6K30

iOS你不知道的事--Crash分析

通过iPhone的Crash log也可以分析一些,但是这个是需要用户配合的,因为需要用户在手机 中 设置-> 诊断与用量->勾选 自动发送 ,然后在xcode中 Window->Organizer->...它又是如何与Unix信号建立联系的? Mach是一个XNU的微内核核心,Mach异常是指最底层的内核级异常,被定义在下 。...下面就拿出最常见的两种Crash分析一下 Exception !...(好像以前奔溃还不清晰似的),这里说一下:的意思你非常清晰的知道奔溃之前做了一些什么!...die,but rises again harder and stronger signal 函数拦截不到的解决方式 在debug模式下,如果你触发了崩溃,那么应用会直接崩溃到主函数,断点都没用,此时没有任何

1.4K10
领券