2013-05-16 60 views
0

我想检查我的NSMutableArray是否包含我的自定义对象。但是,如果我明白正确包含功能搜索在阵列相同的对象(放置在相同的存储点)检查对象数组中是否存在没有循环的对象

if(![objectArray containsObject:objToCheck]) 
{ 
    [objectArray addObject:objToCheck]; 
}  

我知道objectArray具有相比objToCheck相同变量值相同对象,但例如如果始终返回false 。有没有办法检查这个没有写自定义循环和比较对象的参数?

+0

您是否正在尝试查找特定的对象实例或类对象? – uchuugaka

+1

取决于你想要做什么,NSSet可能更有用。 – uchuugaka

+0

我想找到具体的对象,列表中的所有对象都是相同的类,所以我想找到具有相同变量值的对象 – Datenshi

回答

4

重写自定义对象的[NSObject isEqual:]方法(实际上它是NSObject协议的一部分),并检查任何实例变量对您来说是否有意义,以使对象被视为相等。

Here's an Apple Cocoa Competency关于这个问题的文章。

+1

...并且与往常一样,不要忘记相应地重写'hash'。 –

+0

@NikolaiRuhe同意! – trojanfoe

+0

默认不会简单地使用对象ID吗? – uchuugaka

0

您可以尝试从阵列中创建一个临时NSSet并根据成员资格进行测试。

+0

倒票应该有评论 – uchuugaka

+0

可能是因为NSSet没有帮助比较对象。 “NSArray的'containsObject:'已经可以检查成员资格。在这个问题中,这是缺少的比较。 –

+0

NSSet成员身份是自动唯一的对象实例。 NSArray可以多次保存相同的实例。也许我错过了一些问题的角度。 – uchuugaka