2012-12-16 56 views
0

我有一个NSMutableArray自定义对象,它们通过NSArchiver存档。我需要能够检索档案作为备份,并将其与现有的NSMutableArray合并到应用程序中。我需要删除应用内与未存档的内容之间的重复内容,但通常使用NSSet或通过isEqualcontainsObject进行比较的方法不起作用,因为虽然最初相同的对象显然不是归档后的对象。我可以通过两个数组进行嵌套迭代,并比较对象ivars,但这似乎相当繁琐。归档后比较对象

有什么我失踪了。我对Objective-C有所了解,并使用NSArchiver

回答

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],没有什么奇怪的。

+0

我现在开始明白这一点。谢谢。我不理解为什么我可以在现有数组中比较对象本身(使用多个ivars),但使用归档数组我不能。我会研究isEqual的重写,正如我所说的,我总是可以迭代和比较对象ivars - 只是没有NSSet那么快,可以与字典数组一起工作。 –