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

时间:2013-07-03 15:15:56

标签: ios objective-c nsarray

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

- (void)addUser:(id)user withTitle:(NSString *)title {

    if (![_selectedUsers containsObject:user]) {
        [_selectedUsers addObject:user];
    }
}

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

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

我的问题是,有没有明显的理由说明为什么containsObject不能一直在这里工作?

1 个答案:

答案 0 :(得分:3)

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

话虽如此,你问题中的解释是我所期望的相反