я учу какао / цель-с. Прямо сейчас я имею дело с кодированием ключ / значение. Прочитав книгу Аарона и другие источники, я подумал, что смог оставить простые примеры и попробовать сложные ...
Я пытаюсь прочитать список свойств iTunes (iTunes Music Library.xml). Я хотел бы получить треки, хранящиеся в определенном плейлисте.
Наверное, все это знают, но ниже я положил кусок xml:
<plist version="1.0">
<dict>
<key>Major Version</key><integer>1</integer>
...
<key>Playlists</key>
<array>
<dict>
<key>Name</key><string>Library</string>
<key>Master</key><true/>
<key>Playlist ID</key><integer>20117</integer>
...
<key>Playlist Items</key>
<array>
<dict>
<key>Track ID</key><integer>10281</integer>
</dict>
<dict>
<key>Track ID</key><integer>10283</integer>
</dict>
<dict>
<key>Track ID</key><integer>10285</integer>
</dict>
...
</array>
</dict>
<dict>
<key>Name</key><string>Classical Music</string>
<key>Playlist ID</key><integer>45013</integer>
...
</dict>
</array>
</dict>
</plist>
Как видите, списки воспроизведения хранятся в виде словарей внутри массива, а ключ, который его идентифицирует, находится внутри него, а не как <key>
перед ним.
Проблема в том, что я не могу понять, как искать ключ, находящийся внутри другого.
С помощью следующего кода я могу найти массив, в котором хранятся списки воспроизведения, но как найти конкретный <dict>
? В приведенном выше списке словарь имеет 3 ключа для его идентификации: имя, мастер и идентификатор. Первый плейлист имеет идентификатор 20117 и второй 45013. Как получить треки плейлиста 20117?
NSDictionary *rootDict = [[NSDictionary alloc] initWithContentsOfFile:file];
NSArray *playlists = [rootDict objectForKey:@"Playlists"];
Здесь, в Stackoverflow, я нашел эту запись , но я не уверен, что итерация по массиву и проверка это хорошая идея.
Я совершенно уверен, что смогу использовать valueForKeyPath
, но я не могу понять, как это сделать.
Любая помощь приветствуется.
ТИА
Bob