【发布时间】:2010-05-22 23:42:21
【问题描述】:
我正在学习 cocoa/objective-c。现在我正在处理键/值编码。在阅读了 Aaron 的书和其他资料后,我认为我可以离开简单的例子,尝试一个复杂的例子......
我正在尝试读取 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>?在上面的 plist 中,字典有 3 个键来识别它:name、master 和 id。第一个播放列表的id为20117,第二个为45013。如何获取播放列表20117的曲目?
NSDictionary *rootDict = [[NSDictionary alloc] initWithContentsOfFile:file];
NSArray *playlists = [rootDict objectForKey:@"Playlists"];
我在 Stackoverflow 找到了这个 post,但我不确定迭代数组并测试它是否是个好主意。
我很确定我可以使用valueForKeyPath,但我不知道该怎么做。
欢迎任何帮助。
TIA,
鲍勃
【问题讨论】:
-
你想找到第一个包含给定轨道 id 的字典吗?
-
否,按播放列表名称或其他键。我将编辑我的帖子以添加播放列表字典中的其他键。
标签: objective-c itunes plist