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