NSArray何时不再包含相同的项目?

时间:2012-02-02 03:58:47

标签: objective-c cocoa nsarray nsdictionary

我有一个存储NSDictionaries的NSArray。每个字典都有两个键;名称和包含'items'的子数组。

我想在某次操作后检查其中一个词典是否仍然存在于NSArray中。在操作之前,我将一个名为'orginalDictionary'的指针存储到我感兴趣的字典中。然后我执行我的操作(从该字典中的子数组中删除一个'items')。在操作之后,我想我可以使用

检查字典本身(不是删除的项目)是否仍然存在
if ([arrayOfDictionaries containsObject:originalDictionary]) {...

但它没有按预期工作。即使数组仍包含原始字典(虽然其中包含已修改的子数组),但调用返回该数组不再包含该字典。

那可能是对的吗?如果数组中的项发生更改,containsObject是否不再将其识别为同一对象?或者是其他事情发生在这里?

修改 我开始认为我的数组的填充方式是根本原因。字典数组是根据某些设置从一个或多个其他数组创建的。 这些数组本身是使用获取请求填充的,该请求根据获取的对象创建了字典。因此,当某些数据发生更改时(或者即使只是通过请求数组的返回结果来触发获取),这将重建返回的数组,并且里面的字典将是新项。听起来不错吗?如果是这样,我想我别无选择,只能存储一个自我管理的唯一密钥?

1 个答案:

答案 0 :(得分:0)

containsObject:确定表示相同的对象是否在数组中,这与isEqual:indexOfObject:使用的测试相同。例如。两个完全不同的字典包含相同的键/值对将比较相等,因为它们都表示相同的值 - 正如两个整数变量比较相等,如果它们包含相同的整数值。

方法indexOfObjectIdenticalTo:查找对象是否存在于数组中。

然而,这并不能直接解决您的问题。如果你实际上有一个包含NSMutableArray的{​​{1}}并且你保留了对你正在检查的NSMutableDictionary的引用,那么价值或对象比较应该有效......

使用调试器跟踪实际引用(地址/指针),或使用NSMutableDictionaryNSLog()格式(例如%p)将它们转储到控制台。