NSArray indexOfObject 返回 nil

8

你知道为什么我无法获取一个我确定存在于数组中的对象的索引吗?而是得到了nil。

(lldb) po newItem
<ReceiptItem: 0x16a428b0>

(lldb) po self.items
<__NSArrayM 0x169bf0e0>(
<ReceiptItem: 0x16a428b0>
)

(lldb) po [self.items indexOfObject:newItem]
<nil>

谢谢


1
“indexOfObject” 会向数组中的所有对象发送“isEqual”,直到一个“isEqual”返回“true”。可能“ReceiptItem”覆盖了“isEqual”并始终返回“false” - 这个类是由您编写的还是其他人可能已经这样做了? - luk2302
@luk2302 很有趣,我会去看看。 - Yossi
@Yossi,"luk" 问你是不是写的这个类?还是别人写的? - Omarj
1
尝试这样做:(lldb) p (NSInteger) [self.items indexOfObject:newItem]; - Omarj
2个回答

16

-indexOfObject: 返回一个 NSUInteger 类型的整数,而不是一个对象引用。因此,你不应该使用 po(打印对象)调试命令,而应该使用 p

它返回的是 0,而不是 nil,这意味着它在数组的第一个位置找到了这个对象。如果它没有找到这个对象,-indexOfObject: 将返回 NSNotFound

与 anObject 相等的第一个对象的最低索引。如果数组中没有任何对象与 anObject 相等,则返回 NSNotFound。


1

尝试做这个

(lldb) p (NSUInteger)[self.items indexOfObject:newItems];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接