ios - NSArray containsObject 方法不一致的结果

标签 ios objective-c nsarray

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

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

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

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

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

我的问题是,是否有任何明显的原因导致 containsObject 在这里无法始终如一地工作?

最佳答案

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

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

关于ios - NSArray containsObject 方法不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17451823/

相关文章:

iphone - arrayWithContentsOfFile 无法读取 plist 文件

ios - reloadRowsAtIndexPaths 不更新我的单元格数据

ios - React Native 启动/启动画面最佳实践?

ios - AssertMacros.h:预处理程序表达式中预期的行尾

ios - 从 NSMutableArray 中删除重复项,并在 'for' 循环中添加对象

arrays - 在 SWIFT 中过滤字符串数组的谓词抛出错误,指出 NSCFString 不是键值编码

ios - 如何限制按钮的音量(Swift)

objective-c - NSNumber 与 NSInteger 与 NSObject 属性的 int

ios - 从 nsarray 中删除一个对象将删除所有对象

objective-c - 从对象数组中获取属性数组