ios - Objective C - NSArray 的 indexOfObject:不起作用
问题描述
我[items indexOfObject:items.lastObject]
用来获取最后一个索引,但此代码返回nil
. 为什么会这样?
解决方案
数组中的第一个和最后一个对象都是使用“固定空间”系统项创建的条形按钮项。
调用的结果indexOfObject:
是0
,不是nil
。这意味着在 index 找到对象0
。indexOfObject:
不能回来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
.
推荐阅读
- r - 将点连接在一起以创建单线和映射输出
- python - 如何从 node-red 打开 CV2.frame 窗口?- 执行脚本到 UI 应用程序
- mysql - 为什么 MySQL 在仅选择 id 时查询随机行?
- mongodb - 当应用程序连接到这些多个副本集时,为什么每个 mongodb 副本集都应该有一个不同的 replSetName 值?
- java - 如何从未来的结果中获取 Callable
- appium - 防止appium桌面客户端强制停止应用
- java - 断言集合中的每个字符串都包含子字符串的最佳方法?
- python-3.x - reshape 的输入是一个具有 788175 个值的张量,但请求的形状有 1050900
- kotlin - 错误:(1, 41) Kotlin:符号在模块“jdk.internal.opt”中声明,它不导出包“jdk.i”
- javascript - 如何使用 IntelliJ 实时模板创建“this.someMethod = this.someMethod.bind(this)”的快捷方式?