归档后比较对象
Posted
技术标签:
【中文标题】归档后比较对象【英文标题】:Comparing objects after archiving 【发布时间】:2012-12-16 02:33:52 【问题描述】:我有一个NSMutableArray
的自定义对象,它们通过NSArchiver
存档。我需要能够检索存档作为备份并将其与应用程序中现有的NSMutableArray
合并。我需要删除应用程序内NSMutableArray
和未归档的重复项之间的重复项,但使用NSSet
或通过isEqual
或containsObject
使用比较的常用方法不起作用,因为虽然最初相等的对象显然不在之后归档。我可以通过两个数组进行嵌套迭代并比较对象 ivars,但这似乎相当繁重。
我有什么遗漏的吗?我对 Objective-C 和使用 NSArchiver
有点陌生。
【问题讨论】:
【参考方案1】:isEqual:
和 hash
应该在您使用 NSArchiver
存储的对象中被覆盖(如果它们是自定义的),否则您将无法将已取消归档的项目与您已经使用的实例进行比较有。
通常isEqual:
方法必须关心对两个对象的相等性有意义的所有 ivars,即使因为我不知道您如何认为能够比较使用许多其他对象和组合的两个对象没有检查每一个。这只是你必须做的。
如果你有带 x、y 和 z 变量的 A 类,那么通常是 [a1 isEqual:a2]
iif [a1.x isEqual:a2.x] && [a1.y isEqual:a2.y] && [a1.z isEqual:a2.z]
,这没什么奇怪的。
【讨论】:
我现在开始明白这一点。谢谢。我不明白为什么我可以比较现有数组中的对象本身(使用多个 ivars),但我不能使用存档数组。我将研究 isEqual 的覆盖,正如我所说,我总是可以迭代和比较对象 ivars - 只是不如 NSSet 快,后者适用于字典数组。以上是关于归档后比较对象的主要内容,如果未能解决你的问题,请参考以下文章