Ios 如何覆盖NSManagedObject的哈希和isEqual?

Ios 如何覆盖NSManagedObject的哈希和isEqual?,ios,hash,nsmanagedobject,nsset,Ios,Hash,Nsmanagedobject,Nsset,我们有许多不同类型的NSManagedObject。 其中一些具有其他NSManagedObject的NSSet成员。 问题是我确实需要覆盖集合中对象的hash和isEquals方法,但它们是nsManagedObject。 我在获取集合中多个相同对象时遇到问题。 据我所知,由于哈希默认为对象地址,所以所有对象都是不同的。所以我需要覆盖散列和等号,但找不到任何方法 我们拥有的是系统中的一堆东西,更多的东西是通过XML输入的——有时是现有对象的重复。当它们相同时,我不希望将DUP添加到集合中。正如

我们有许多不同类型的NSManagedObject。 其中一些具有其他NSManagedObject的NSSet成员。 问题是我确实需要覆盖集合中对象的hash和isEquals方法,但它们是nsManagedObject。 我在获取集合中多个相同对象时遇到问题。 据我所知,由于哈希默认为对象地址,所以所有对象都是不同的。所以我需要覆盖散列和等号,但找不到任何方法


我们拥有的是系统中的一堆东西,更多的东西是通过XML输入的——有时是现有对象的重复。当它们相同时,我不希望将DUP添加到集合中。

正如Wain上面提到的,声明您不能覆盖
散列
相等:
。这意味着股票
NSSet
不能满足您的需要

您的一些选择包括:

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

您不能显式覆盖NSManagedObject上的isEqual或hash。因此,这意味着创建的NSSet不能真正视为NSSet?这取决于你如何定义平等。如果对象相等,为什么每个对象都有不同的实例?看看这个问题:我可以发誓我在两天前就回答了这个问题。。。batkuip提出的另一个问题似乎与此无关。有DUP,因为我正在加载一大块XML,服务器有时会重新发送一个对象。所以我想阻止添加DUP。