持久指向对象

时间:2014-05-13 02:56:09

标签: ios objective-c pointers memory-address

问题:需要唯一标识符

我正在使用NSArchiver保存自定义对象。它保留了我的所有对象数据,但是,每次我归档和取消归档它都会为它们提供新的地址

"<Item: 0x17005d070>",
"<Item: 0x17005e4b0>",
"<Item: 0x17005e4e0>"

"<Item: 0x170059fe0>",
"<Item: 0x170059ec0>",
"<Item: 0x17005a0a0>"

对于相同的3个对象。

这会导致问题,因为我需要保留一些项目的副本并保留此副本,然后将副本与原始副本进行比较[currentItem isEqual:oldItem];即使这应该返回true(即对象是在名称,位置等方面相同)它将返回false,因为指针不同。这是什么解决方案?我已经考虑过为每个对象添加一个uniqueID,然后只存储那个uniqueID,但这对于我正在尝试做的事情来说似乎有点过头了。

解决方案:

您不能依赖对象内存地址作为唯一标识符。使用NSUUID

1 个答案:

答案 0 :(得分:4)

问题是您没有为Item类实现isEqual:。实施它。否则,正如您所观察到的那样,我们依靠NSObject对isEqual:的定义,这是相同的(即这些是同一个对象)。如果对象在名称,位置等方面是相同的,那么由告诉Cocoa一个Item应该返回true。它并不神奇地知道这一点。