如何从我的plist中提取第二条记录?

时间:2009-11-05 21:03:15

标签: iphone plist

我有一个名为albums.plist的示例数据库文件 它的结构如下(非常简单的布局)。

我是Objective-C编程的新手,如果有人能够帮我解决这个问题,我会学到很多东西。

我想以编程方式做的是解析这个数据库,例如,在屏幕上显示,例如,第二张专辑详细信息 - 即专辑和艺术家 - 在两个UILabels

一个名为artist_name的UILabel因此将设置为:@"David Bowie" 并在名为UILabel的另一个album_name下面设置为:@"Heroes"

有人可以帮我解决这个问题吗?我会从中学到很多东西。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>The Beatles</key>
        <string>Let It Be</string>
        <key>David Bowie</key>
        <string>Heroes</string>
        <key>Dire Straits</key>
        <string>Brothers In Arms</string>
    </dict>
</plist>

我遇到过以下代码,我可能会用它来打开文件的访问权限。

我只需要一些关于如何访问数据库中第二条记录的指示?

非常感谢。

NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"albums.plist"];
plistDictionary = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];

2 个答案:

答案 0 :(得分:0)

如果字典加载正确,您应该能够使用以下内容访问其键和值:

for ( id key in plistDictionary ) {
    artist_name.text = key;
    album_name.text = [ plistDictionary objectForKey:key ];
}

答案 1 :(得分:0)

[plistDictionary allKeys]将返回字典中所有键的数组。然后,您可以遍历数组中的键,或通过其索引选择一个键。但请注意,字典没有已定义的顺序,因此您无法依赖数组中键的顺序。不过你可以对它们进行排序。

NSArray *artists = [[plistDictionary allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

// Access the second album (after sorting)
NSString *secondAlbumName = [plistDictionary objectForKey:[artists objectAtIndex:1]];
NSLog(@"%@", secondAlbumName);

一个建议:如果您可以更改plist文件的格式,我建议您这样做。而不是艺术家姓名/专辑名称对的字典,考虑一系列字典。这将是您的数据恕我直言的更清洁的结构,它还将简化访问数组中的项目。像这样:

<array>
    <dict>
        <key>artist_name</key>
        <string>The Beatles</string>
        <key>album_name</key>
        <string>Let It Be</string>
    </dict>
    <dict>
        <key>artist_name</key>
        <string>David Bowie</string>
        <key>album_name</key>
        <string>Heroes</string>
    </dict>
</array>

读取此类文件的代码如下:

NSArray* plistArray = [NSArray arrayWithContentsOfFile:finalPath];

// Access the second entry in the array:
NSDictionary *album = [plistArray objectAtIndex:1];
NSString *artistName = [album objectForKey:@"artist_name"];
NSString *albumName = [album objectForKey:@"album_name"];
NSLog(@"%@ - %@", artistName, albumName);