我有一个名为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];
答案 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);