目标C-NSArray的indexOfObject:不起作用

时间:2018-06-26 02:39:45

标签: ios objective-c nsarray

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

enter image description here

1 个答案:

答案 0 :(得分:2)

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

调用indexOfObject:的结果是0,而不是nil。这意味着可以在索引0上找到该对象。 indexOfObject:无法返回nil。如果找不到对象,它将返回特殊值NSNotFound,它是-1的无符号值。

摘自indexOfObject:的文档:

  

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

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

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

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

p [items indexOfObjectIdenticalTo:items.lastObject]

将给您6而不是0