首页 > 解决方案 > Objective C - NSArray 的 indexOfObject:不起作用

问题描述

[items indexOfObject:items.lastObject]用来获取最后一个索引,但此代码返回nil. 为什么会这样?

在此处输入图像描述

标签: iosobjective-cnsarray

解决方案


数组中的第一个和最后一个对象都是使用“固定空间”系统项创建的条形按钮项。

调用的结果indexOfObject:0,不是nil。这意味着在 index 找到对象0indexOfObject:不能回来nil。如果未找到对象,则返回特殊值NSNotFound,即 的无符号值-1

从文档中indexOfObject:

从 index 开始0,数组的每个元素都作为参数传递给isEqual:发送到 anObject 的消息,直到找到匹配项或到达数组末尾。isEqual:如果(在NSObject协议中声明)返回,则认为对象相等YES

如果使用相同的系统项(可能还有一些其他属性)创建了两个条形按钮项实例,则执行UIBarButtonItem isEqual:将返回。YES

indexOfObject:不是基于对象的实例,而是基于isEqual:.

如果要根据对象的标识(其地址)而不是 来查找对象的索引isEqual:,请使用indexOfObjectIdenticalTo:.

p [items indexOfObjectIdenticalTo:items.lastObject]

会给你6而不是0.


推荐阅读