Ios NSMutableDictionary无法正常工作
目前,我在使用NSMutableDictionary时遇到了一个非常奇怪的问题:键值对对象的代码相同,数据相同,但结果不同 我的字典使用用户定义的类对象作为键,值是对象数组 以下是构建字典的代码:Ios NSMutableDictionary无法正常工作,ios,nsmutabledictionary,Ios,Nsmutabledictionary,目前,我在使用NSMutableDictionary时遇到了一个非常奇怪的问题:键值对对象的代码相同,数据相同,但结果不同 我的字典使用用户定义的类对象作为键,值是对象数组 以下是构建字典的代码: _designs = [[NSMutableDictionary alloc] init]; for (Hierarchy * hier in downloadedHierarchies.objects) { NSLog(@"Hierarchy [%d - %d - %@]", hier.de
_designs = [[NSMutableDictionary alloc] init];
for (Hierarchy * hier in downloadedHierarchies.objects)
{
NSLog(@"Hierarchy [%d - %d - %@]", hier.designId, hier.hierarchyId, hier.hierarchyName);
Design * aDesign = [[Design alloc] initWithId:hier.designId withName:hier.designName];
NSMutableArray *array = ([_designs objectForKey:aDesign] == nil) ? [[NSMutableArray alloc] init] : (NSMutableArray *)[_designs objectForKey:aDesign];
NSLog(@"Design %d has %d of hierarchies", aDesign.designId, array.count);
[array addObject:hier];
[_designs setObject:array forKey:aDesign];
NSLog(@"Design %d now has %d of hierarchies", aDesign.designId, [[_designs objectForKey:aDesign] count]);
}
问题是:
-我的测试数据只有1个设计和3个层次结构。每次运行应用程序时,我都会在字典中得到不同的结果。有时我会得到2个键值对,有时是3个。甚至键也来自相同的设计(相同的设计ID),层次结构分散在这些键值对之间
一些注意事项:
- 设计已经实现了NSCopying以及isEqual,并测试了ok
- 层次结构还实现了NSCopying
- 调试这些代码行以获得正确的结果
我做错了什么?您还需要在设计对象中提供isEqual和hash。这取自NSObject的协议描述: 等质量: 返回一个布尔值,该值指示接收器和给定对象是否相等。(必选)
- (BOOL)isEqual:(id)一个对象 参数 对象 要与接收器进行比较的对象。 返回值 如果接收器和对象相等,则为是,否则为否
如果两个对象相等,则它们必须具有相同的哈希值。如果在子类中定义isEqual:并打算将该子类的实例放入集合中,那么最后一点尤为重要。确保在子类中也定义了hash。在
[\u designs setObject:array forKey:aDesign]中代码>密钥应该是字符串而不是对象。嗨,samfisher,根据苹果公司的说法,密钥可以是符合NSCopying协议的对象。所以我相信这不是问题所在。大卫,你才是真正的男人。添加hash方法可以解决这个问题。然而,我决定从一开始就不实现hash方法,因为我认为默认情况下它应该返回相同的值,因此实现isEqual就足够了。