Вопрос

У меня есть Nsdictionary объект, который заполняется NSMutableStress для его клавиш и объектов. Я смог изменить ключ, изменив исходное NsmutableString с помощью SetString: метод. Однако они, однако, остаются преданными, независимо от содержимого строки, используемой для первоначального установки ключа.

Мой вопрос в том, это ключ защищен от изменения, означающий, что он всегда будет одинаковым, если я не удалю его и добавим другого к словарю?

Спасибо.

Это было полезно?

Решение

Ключи есть -copyКогда элементы установлены, чтобы вы не могли меняться потом бесполезны.

Методы, которые добавляют записи в словари - будь то часть инициализации (для всех словарей) или во время модификации (для смежных словарей) -Copy каждый клавишный аргумент (ключи должен соответствовать NSCopying Протокол) и добавьте копии в словарь. Каждое соответствующее значение Value получает сохранение сообщения, чтобы гарантировать, что он не будет отделен до этого словарь.

Вы можете использовать CFDictionary с KCFTyPedictionAryKeyCallbacks или просто заменить элемент:

id value = [dictionary objectWithKey:oldKey];
[dictionary setObject:value withKey:newKey];
[dictionary removeObjectForKey:oldKey];

Другие советы

Попробуйте использовать NSMutableDictionary, вместо.

Вы можете создать копию словаря, фильтруя клавиши, как вы идете. Я делаю это для преобразования Case Case и подчеркивает при заполнение объектов от JSON с использованием KVC. Увидеть мою библиотеку рефакторинга, es_ios_utils., для источника. ESNSCATTARTES.H. предоставляет:

@interface NSMutableDictionary(ESUtils)
    //Changes keys using keyFilter. If keyFilter generates duplicate non-unique keys, objects will be overwritten.
    -(void)addEntriesFromDictionary:(NSDictionary*)d withKeyFilter:(NSString*(^)(NSString*))keyFilter;
...

Итак, чтобы сделать все клавиши заглавными буквами, вы могли бы сделать что-то вроде:

NSMutableDictionary *md = [NSMutableDictionary dictionaryWithCapacity:oldDictionary.count];
[md addEntriesFromDictionary:oldDictionary
               withKeyFilter:^NSString*(NSString *key) { 
                                 return key.uppercaseString;
                             }];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top