问题:需要唯一标识符
我正在使用NSArchiver保存自定义对象。它保留了我的所有对象数据,但是,每次我归档和取消归档它都会为它们提供新的地址
"<Item: 0x17005d070>",
"<Item: 0x17005e4b0>",
"<Item: 0x17005e4e0>"
"<Item: 0x170059fe0>",
"<Item: 0x170059ec0>",
"<Item: 0x17005a0a0>"
对于相同的3个对象。
这会导致问题,因为我需要保留一些项目的副本并保留此副本,然后将副本与原始副本进行比较[currentItem isEqual:oldItem];
即使这应该返回true(即对象是在名称,位置等方面相同)它将返回false,因为指针不同。这是什么解决方案?我已经考虑过为每个对象添加一个uniqueID,然后只存储那个uniqueID,但这对于我正在尝试做的事情来说似乎有点过头了。
解决方案:
您不能依赖对象内存地址作为唯一标识符。使用NSUUID。
答案 0 :(得分:4)
问题是您没有为Item类实现isEqual:
。实施它。否则,正如您所观察到的那样,我们依靠NSObject对isEqual:
的定义,这是相同的(即这些是同一个对象)。如果对象在名称,位置等方面是相同的,那么由你告诉Cocoa一个Item应该返回true。它并不神奇地知道这一点。