1

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

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

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

一个是被调用的 UILabel artist_name,因此将设置为:@"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];
4

2 回答 2

0

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

for ( id key in plistDictionary ) {
    artist_name.text = key;
    album_name.text = [ plistDictionary objectForKey:key ];
}
于 2009-11-05T21:16:06.133 回答
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);
于 2009-11-05T21:35:01.580 回答