現在、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 も実装しています
これらのコード行をデバッグすると、正しい結果が得られます
ここで何が間違っていますか?