Я хочу загрузить NSDictionary из следующего файла plist, не изменяя его порядок.
Этот файл plist: Here.
Я много исследовал, и нашел OrderedDictionary и M13OrderedDictionary.
Во-первых, я попробовал NSDictionary (я знаю, что он не)Как загрузить данные из plist без изменения порядка
- (void)testNSDictionary {
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSLog(@"%@",dictionary);
}
Тогда я получил следующий лог:
{
G = {
R = {
H = "";
S = "";
};
V = {
T = "";
};
};
S = {
B = {
L = "";
};
O = {
K = "";
L = "";
};
V = {
T = "";
};
};
}
Это совершенно другой порядок от исходного файла Plist! (Я знаю)
Я думаю, что это алфавитный порядок.
Затем я попытался OrderedDictionary со следующим кодом:
#import "OrderedDictionary.h"
- (void)testOrderedDictionary {
OrderedDictionary *dictionary = [OrderedDictionary dictionaryWithContentsOfFile:filePath];
NSLog(@"%@",dictionary);
}
Тогда я получил следующий лог:
{
G = {
R = {
H = "";
S = "";
};
V = {
T = "";
};
};
S = {
B = {
L = "";
};
O = {
K = "";
L = "";
};
V = {
T = "";
};
};
}
А? Это тот же результат, что и NSDictionary.
Наконец, я попробовал M13OrderedDictionary со следующим кодом.
#import "M13OrderedDictionary.h"
- (void)testM13OrderedDictionary {
M13OrderedDictionary *dictionary = [M13OrderedDictionary orderedDictionaryWithContentsOfFile:filePath];
NSLog(@"%@",dictionary);
}
Тогда я получил следующий лог:
{
}
Ничего возвратили. Я не понимаю, что происходит.
Я хотел бы знать, как я могу правильно использовать OrderedDictionary и M13OrderedDictionary. Если они устарели, я хочу узнать альтернативный способ разбора файла plist в NSDictionary или NSArray или что-то в этом роде.
Примечание: я не хочу менять файл plist, потому что этот формат является лучшим для меня.
Как вы определяете, что ключи не работают? Вы определяете, какой порядок доступа к ключам в NSDictionary. Если вы хотите использовать набор с определенным порядком, используйте NSArray, а не NSDictionary. –
Я знаю, что NSArray может сохранить порядок, но он не может обладать именем самого NSArray. Например, в этом случае самый глубокий слой T, S, H, T, L, K, L может содержаться NSArray, но другие не могут. Можно ли включить имя массива в NSArray plist? – usingsystem8
Знаете ли вы о '' NSXMLDocument''? Его можно использовать для загрузки любого правильно отформатированного XML-документа (включая plists) в одной строке с API, очень похожим на API NSDictionary' и NSArray' ('' init (URL: ... ''). После того, как у вас есть этот документ в памяти, вы можете выполнять итерацию по его элементам для создания упорядоченного словаря. Или вы можете просто оставить его как экземпляр '' NSXMLDocument'' и использовать силу * xPath * для проанализируйте его. –