2013-03-08 33 views
0

你怎么检查两个NSMutableSets相等相同的成员,相同数目的成员的)?平等属性

我的isEqualToSet的实施似乎没有工作。

// members is a NSMutableSet of AUser objects 

// users is also a NSMutableSet of AUser objects, it is an attribute of instances of the AGroup class 

[[group valueForKey:@"users"] isEqualToSet:members] 


AGroup 
- users 

AUser 
- name (String) 

如何通过检查它们的名称属性来检查这些集合是否相等?

对不起,由于我缺乏知识,这是我第一次使用iOS编程,所以我只知道当前的基础知识。

+2

'isEqualToSet:'应该工作。也许这是集合中对象的问题。他们应该实现'isEqual:'和'hash' – 2013-03-08 06:05:36

+0

你的设置的内容是什么?字符串或数字或其他人? “'isEqualToSet'”可能只查看集合中对象的地址以确定相等性。但看看上面的评论,也许它也在查看某些类型的对象的内容。 – 2013-03-08 06:06:04

+0

哦,好的。谢谢你帮我理解了这个问题。我会发布有关错误的问题的更新。集合中的对象是自定义类的两个实例,它们具有String属性,但我不知道如何检查属性。 – GangstaGraham 2013-03-08 06:08:41

回答

2

如果要检查相应的name属性是相同的,下面应该工作:

[[group valueForKeyPath:@"users.name"] isEqualToSet:[members valueForKey:@"name"]] 

[group valueForKeyPath:@"users.name"]返回集合组中的所有用户的姓名,并[members valueForKey:@"name"]返回集的members集中所有用户的名称。

更新:由于在评论中变得清楚,members是一组字符串,而不是一组用户对象。因此,代码简化为:

[[group valueForKeyPath:@"users.name"] isEqualToSet:members] 
+0

首先,@马丁你先生是一颗宝石!感谢您帮助我,并感谢帮助SO社区。我会给你勾号和upvote,你应该为典型的代码,但不幸的代码不幸的是有点奇怪。我得到一个错误:''[<__ NSCFString 0xa268260> valueForUndefinedKey:]:这个类不是密钥值编码兼容的密钥名称。''看起来像我将不得不实现isEqual:和哈希如上建议。 – GangstaGraham 2013-03-08 06:29:56

+1

@GangstaGraham:听起来好像'members'是一组字符串,而不是一组用户对象。试试'[[group valueForKeyPath:@“users.name”] isEqualToSet:members]'。 – 2013-03-08 06:35:11

+0

呜呼!!!!! @马丁这工作。是的,我只记得成员实际上是一组字符串,在回顾我的代码后,这是正确的!做得好。如果可以的话,我会加倍投票回答这个问题。再次感谢。 :) – GangstaGraham 2013-03-08 06:38:42