我有NSMutableArray
个自定义对象,这些对象通过NSArchiver
存档。我需要能够将存档检索为备份,并将其与应用程序中的现有NSMutableArray
合并。我需要删除应用内NSMutableArray
和未归档版本之间的重复项,但使用NSSet
或通过isEqual
或containsObject
进行比较的常用方法不起作用虽然最初相等的对象显然不是归档后的。我可以通过两个数组进行嵌套迭代并比较对象ivars,但这看起来非常繁重。
有什么东西我不见了。我对Objective-C有点新,并使用NSArchiver
。
答案 0 :(得分:1)
isEqual:
和hash
应该在您使用NSArchiver
存储的对象中被覆盖(如果它们是自定义的),否则您将无法比较已经存在的项目使用您已有的实例取消归档。
通常isEqual:
方法必须关心对两个对象相等有意义的所有ivars,即使因为我不知道你如何能够比较使用许多其他对象的两个对象没有检查每一个组成。这正是你必须要做的。
如果您的A级带有x,y和z ivars,那么通常[a1 isEqual:a2]
iif [a1.x isEqual:a2.x] && [a1.y isEqual:a2.y] && [a1.z isEqual:a2.z]
,其中没有什么奇怪的。