2013-03-06 3 views
-1

Я создал код, который делает вспомогательный словарь для хранения ключей основного словаря. Поэтому я могу получить ключ от стоимости. Чтобы сделать их уникальными, в случае двух или более одинаковых значений, я храню идентификаторы объектов словаря как ключи и их ключи как объекты.NSDictionary хранит копию избыточных объектов - как предотвратить?

Но если два объекта имеют одинаковое значение, они также имеют одинаковый идентификатор. Поэтому я не могу получить два различных ключа:

NSDictionary *myDict = @{@"key1": @"obj1", @"key2": @"obj1", @"key3" : @"x"}; 
NSLog(@"%p",[myDict objectForKey:@"key1"]); 
NSLog(@"%p",[myDict objectForKey:@"key2"]); 

Выход:

2013-03-06 02:03:28.740 DictTest[2855:303] 0x1000028e8 
2013-03-06 02:03:28.741 DictTest[2855:303] 0x1000028e8 

Как я могу предотвратить это?

+0

От «ID» вы имеете в виду «адрес»? Если это так, NSDictionary не имеет к этому никакого отношения. @ «obj1» всегда указывает на тот же объект, независимо от того, где он используется в программе. –

+0

На деле я имел в виду идентификатор. Моя цель состояла в том, чтобы получить уникальные пары ключ-ключ. Поэтому я использую идентификаторы во втором словаре в качестве ссылки на оба. – awado

ответ

0

Чтобы ответить на мой собственный вопрос: это не проблема словарей, а строковых литералов. @ "obj1" всегда дает тот же ID. Чтобы решить эту проблему, я должен установить словарь по:

NSDictionary *myDict = @{@"key1": [NSMutableString stringWithFormat:@"%@",@"obj1"], @"key2": [NSMutableString stringWithFormat:@"%@",@"obj1"], @"key3" : @"x"}; 

Обратите внимание, что «NSMutableString»! Вам понадобятся измененные объекты.

Смежные вопросы