2013-04-26 48 views
4

我们有一堆各种类型的NSManagedObject。 其中一些成员是其他NSManagedObjects的NSSet成员。 问题是我真的需要重写集合中的对象的哈希和isEquals方法 - 但它们是NSManagedObjects。 我在设置中获取多个相同的对象时遇到问题。 据我所知,由于散列默认为对象地址 - 所有对象都不相同。所以我需要重写哈希和isEquals - 但看不到任何方式来做到这一点。如何覆盖NSManagedObjects的散列和isEqual?

我们所拥有的是系统中的一堆东西,更多是通过XML进入的 - 有时会重复现有的对象。当他们相同时,我不想让队伍添加到集合中。

+0

你明确自己的NSSet类集合类无法覆盖NSManagedObject上的isEqual或哈希值。 – Wain 2013-04-26 23:34:10

+0

那么,这意味着创建的NSSet不能被当作NSSets吗?的Bleh。 – CasaDelGato 2013-04-26 23:45:15

+0

这取决于你如何定义平等。如果对象相同,为什么每个对象都有不同的实例? – Wain 2013-04-26 23:47:44

回答

0

正如Wain以上所述,NSManagedObject documentation指出,您不得覆盖hashisEqual:。所以这意味着股票NSSet不会做你所需要的。

你的一些选项有:

  • 枚举NSSet内容来识别并删除重复
  • 写你NSManagedObjects工厂方法将返回相同的对象给予相同的输入
  • 修复时XML不包含重复对象
  • 唯一对象来自XML之前NSManagedObjects
  • 修改输入XML包含一个唯一的标识符,您可以跟踪,假设复制的对象是确切的重复
  • 实现执行比hash不同uniquing测试和isEqual: