Я столкнулся с той же проблемой, как найдено в этом вопросе. Однако у меня есть последующий вопрос. Я, кажется, нахожусь в той же ситуации как исходный автор вопроса: у Меня есть plist с иерархией словарей, которые определяют экран конфигурации. Они не изменяемы и останутся такими же всюду по приложению. Так как исходное обсуждение, кажется, фокусируется на проблемах, являющихся результатом видоизменения словаря, я должен попросить подтверждение: порядок словаря, гарантировал то же, как они находятся в plist, т.е. поскольку это читается (с initWithContentsOfFile)? Я могу использовать allKeys на нем в этом случае для получения массива правильного порядка ключей, если словарь никогда не изменяется?
Нет, ключи вряд ли появятся в том же порядке, что и ваш файл plist
. Я не могу заглянуть под капот, но предполагаю, что ключи упорядочены таким образом, чтобы обеспечить эффективный поиск. В документации для allKeys
сказано, что порядок элементов в массиве не определен.
Если вам нужен NSDictionary
, который поддерживает порядок, взгляните на CHDataStructure CHOrderedDictionary
, который делает именно это. Я использую это все время.
Я бы не предполагал, что ключи будут располагаться в каком-либо порядке, потому что allKeys
не гарантирует порядок.
Внутри NSDictionary
используется хеш-таблица .
From allKeys
description :
Порядок элементов в массиве не определен.
Если вы хотите отображать значения в некотором порядке, получите ключи, отсортируйте массив ключей, а затем получите значение для каждого ключа.
Никаких порядка не гарантируется. Даже не гарантируется, что повторение словаря дважды даст вам ключи в том же порядке.