目前我在使用 NSMutableDictionary 时遇到了一个非常奇怪的问题:相同的代码,相同的数据,但键值对对象的不同结果。
我的字典使用用户定义的类对象作为键,值是对象数组。
这是构建字典的代码:
_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 个。甚至键都来自相同的设计(相同的 designId),并且层次结构分散在这些键值对中。
一些注意事项:
设计已经实现了 NSCopying 和 isEqual 并且测试正常
Hierarchy 也实现了 NSCopying
调试这些代码行给出正确的结果
我在这里做错了什么?