首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有自定义键的NSDictionary的行为奇怪--偶尔将值更改为null和back。

带有自定义键的NSDictionary的行为奇怪--偶尔将值更改为null和back。
EN

Stack Overflow用户
提问于 2013-12-28 11:26:11
回答 1查看 38关注 0票数 0

我在NSMutableDictionary上遇到了问题,我正在通过一个循环来填充这个问题,这个循环使用的是键的自定义对象类型。我已经实现了NSCopying,所以我希望一切都会好起来。看着循环的结果,我注意到键看起来很好,但是值在NULL中来回翻转是很奇怪的。每次迭代时字典的控制台输出:

代码语言:javascript
复制
{
    "C#-10" = "<SWPP_BeamModel: 0xc4ba470>";
    "D-10" = "<SWPP_BeamModel: 0xc4b5600>";
    "C-10" = "<SWPP_BeamModel: 0x1277f810>";
}
// ...ok so far

{
    "C#-10" = "<SWPP_BeamModel: 0xc4ba470>";
    "C-10" = "<SWPP_BeamModel: 0x1277f810>";
    "D#-10" = (null);
    "D-10" = "<SWPP_BeamModel: 0xc4b5600>";
}
// ...oops a null

{
    "C#-10" = "<SWPP_BeamModel: 0xc4ba470>";
    "C-10" = "<SWPP_BeamModel: 0x1277f810>";
    "D#-10" = (null);
    "D-10" = "<SWPP_BeamModel: 0xc4b5600>";
    "E-10" = (null);
}
// ...and another

{
    "C#-10" = "<SWPP_BeamModel: 0xc4ba470>";
    "C-10" = "<SWPP_BeamModel: 0x1277f810>";
    "D#-10" = (null);
    "F-10" = (null);
    "D-10" = "<SWPP_BeamModel: 0xc4b5600>";
    "E-10" = "<SWPP_BeamModel: 0x1277fad0>";
}
// ...another but value for key "E-10" is back!

它就这样继续下去。最后的结论是这条线..。

代码语言:javascript
复制
// De-mutablise
_noteBeamsMap = [NSDictionary dictionaryWithDictionary:beamsMap];

,从而导致_noteBeamsMap

代码语言:javascript
复制
{
    "D#9" = (null);
    G1 = (null);
    C14 = (null);
    "G-7" = (null);
    ...

怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-28 11:26:11

结果是,我在自定义key类中实现了isEqual:,但没有实现匹配的hash。简单地说,在这篇有用的博客文章中 hash需要在isEqual:返回YES时返回相同的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20813987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档