jac300
jac300

Reputation: 5222

NSArray containsObject method inconsistent results

I have an NSMutableArray called selectedUsers to which I am adding objects using a method called addUser. The objects being added are most often of type PLManagedUser (a core data managed object) although sometimes the object could be a string. In any case, if the array already contains the object, I do not want to add it to the array. Here is the code:

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

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

I have noticed that if I try to add the same user back to back using the above method, the containsObject catches it, and duplicates are not added. However, if I add the same user (with the same memory address) after having added other objects in between, the duplicate will be added.

I am printing the contents of the array each time I add something to confirm that the duplicate objects are in the array.

My question is, is there any obvious reason why containsObject isn't consistently working here?

Upvotes: 0

Views: 215

Answers (1)

trojanfoe
trojanfoe

Reputation: 122391

You need to provide the ability for an object to identify itself as equal to another object of the same class, and to do this you implement the isEqual: and hash methods.

Having said that, the explanation in your question is the opposite of what I would have expected.

Upvotes: 3

Related Questions