如何覆盖NSManagedObjects的hash和isEqual?

时间:2013-04-26 23:21:23

标签: ios hash nsmanagedobject nsset

我们有一堆各种类型的NSManagedObjects。 其中一些成员是其他NSManagedObjects的NSSet成员。 问题是我真的需要覆盖集合中对象的哈希和isEquals方法 - 但它们是NSManagedObjects。 我遇到了在集合中获取多个相同对象的问题。 据我所知,由于哈希默认为对象地址 - 所有对象都不同。所以我需要覆盖hash和isEquals - 但是看不到任何方法。

我们所拥有的是系统中的一堆东西,更多来自XML - 有时重复现有的对象。当它们相同时,我不希望将重复添加到集合中。

1 个答案:

答案 0 :(得分:0)

如上所述,Wain NSManagedObject documentation声明您不得覆盖hashisEqual:。因此,这意味着股票NSSet无法满足您的需求。

您的一些选择是:

  • 枚举NSSet内容以识别和删除重复项
  • NSManagedObjects编写一个工厂方法,当给定相同的输入时,它将返回相同的对象
  • 修复XML以不包含重复的对象
  • 将来自XML的对象变为NSManagedObjects
  • 之前的唯一对象
  • 修改输入XML以包含您可以跟踪的唯一标识符,假设重复的对象是完全重复的
  • 实现您自己的类NSSet集合类,执行与hashisEqual:
  • 不同的单一测试