Objective C - NSArray 的 indexOfObject:不起作用

Posted

技术标签:

【中文标题】Objective C - NSArray 的 indexOfObject:不起作用【英文标题】:Objective C - NSArray's indexOfObject: not work 【发布时间】:2018-06-26 02:39:45 【问题描述】:

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

【问题讨论】:

它没有返回nil。它返回 0 意味着它匹配数组中的第一个对象(索引 0)。做po items.firstObject。也是固定的空格键按钮项吗? @rmaddy 是的,第一个元素和最后一个元素是固定空间,但所有元素都是引用类型。引用类型之间的比较应该是内存地址的比较。 【参考方案1】:

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

调用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

【讨论】:

以上是关于Objective C - NSArray 的 indexOfObject:不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Objective C - NSArray 的 indexOfObject:不起作用

Objective C /iPhone:是不是可以重新初始化 NSArray?

从Objective C中的NSArray转换时如何比较String?

将 NSArray 中的每个 NSString 元素显示为 UIButton Objective C

将 NSArray 对象写入领域数据库 - Objective C

Objective - C NSArray不可变数组和NSMutableArray可变数组