NSArray包含Object方法不一致的结果



我有一个名为selectedUsers的NSMutableArray,我正在使用名为addUser的方法向其添加对象。添加的对象通常是PLManagedUser(核心数据管理对象)类型,尽管有时对象可能是字符串。在任何情况下,如果数组已经包含对象,我不想将其添加到数组中。这是代码:

- (void)addUser:(id)user withTitle:(NSString *)title {
    if (![_selectedUsers containsObject:user]) {
        [_selectedUsers addObject:user];
    }
}

我注意到,如果我尝试使用上面的方法背靠背添加同一个用户,containsObject会捕获它,并且不会添加重复的用户。但是,如果我在添加了其他对象之后添加了相同的用户(具有相同的内存地址),则会添加重复项。

每次添加一些东西以确认重复的对象在数组中时,我都会打印数组的内容。

我的问题是,containsObject在这里不能一直工作,有什么明显的原因吗?

您需要为一个对象提供将自己标识为与同一类的另一个对象相等的能力,为此,您需要实现isEqual:hash方法。

话虽如此,你问题中的解释与我的预期相反。

最新更新