如何覆盖 NSManagedObjects 的 hash 和 isEqual?

Cas*_*ato 5 hash nsset nsmanagedobject ios

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

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

bne*_*ely 1

正如 Wain 上面提到的,NSManagedObject 文档指出您不得覆盖hashisEqual:。所以这意味着股票NSSet不能满足您的需要。

您的一些选择是:

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