initWithContentsOfFile читает файл в неправильном порядке - PullRequest
0 голосов
/ 08 декабря 2011

Я читаю файл plist, используя код ниже. Моя проблема в том, что файл, кажется, читается в некотором случайном порядке. Порядок всегда один и тот же (d, b, e, c, a, f). Можно ли прочитать файл в «правильном» порядке, как указано в файле?

prefs.plist содержимое файла:

<dict>
    <key>a</key>
    <string>1</string>
    <key>b</key>
    <string>2</string>
    <key>c</key>
    <string>3</string>
    <key>d</key>
    <string>4</string>
    <key>e</key>
    <string>5</string>
    <key>f</key>
    <string>6</string>
</dict>

Код:

//Get file name
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"prefs" ofType:@"plist"];

//Load preferences into dictionary
NSMutableDictionary *myDict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];

Распечатка myDict:

<CFBasicHash 0x4e1f330 [0xe39400]>{type = mutable dict, count = 6,
entries =>
    0 : <CFString 0x4e1f120 [0xe39400]>{contents = "d"} = <CFString 0x4e1f180 [0xe39400]>{contents = "4"}
    1 : <CFString 0x4e1f160 [0xe39400]>{contents = "b"} = <CFString 0x4e1f320 [0xe39400]>{contents = "2"}
    3 : <CFString 0x4e1f130 [0xe39400]>{contents = "e"} = <CFString 0x4e1f190 [0xe39400]>{contents = "5"}
    4 : <CFString 0x4e1f110 [0xe39400]>{contents = "c"} = <CFString 0x4e1f170 [0xe39400]>{contents = "3"}
    5 : <CFString 0x4e1f140 [0xe39400]>{contents = "a"} = <CFString 0x4e1f1a0 [0xe39400]>{contents = "1"}
    6 : <CFString 0x4e1f150 [0xe39400]>{contents = "f"} = <CFString 0x4e1f310 [0xe39400]>{contents = "6"}
}

1 Ответ

2 голосов
/ 08 декабря 2011

Это не обязательно проблема с initWithContentsOfFile:.

Если это ваше намерение и ваш словарь, просто создайте упорядоченный массив, например, так:

NSArray * keys = [myDict keys]; 
NSArray * orderedKeys =
 [keys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

конечно, вы можетеиспользуйте сравнение или определите свое собственное, чтобы упорядочить их.

Тогда вы можете перечислить упорядоченные ключи как массив.

...